首页 > 解决方案 > 具有通用方法的 Swift 协议:无效的重新声明实现

问题描述

我在 Swift 中玩一些协议/通用的东西,我很好奇为什么下面的代码拒绝被编译:

protocol MyProtocol {
    func value<T>() -> T
}

class StringImpl: MyProtocol {
    var string: String

    init() {
        self.string = "..."
    }

    init(string: String) {
        self.string = string
    }

    func value<String>() -> String {
        return self.string as! String
    }
}

class BoolImpl: MyProtocol {
    var value: Bool

    init() {
        self.value = false
    }

    init(value: Bool) {
        self.value = value
    }

    func value<Bool>() -> Bool {
        return self.value as! Bool
    }
}

有特定错误

error: invalid redeclaration of 'value()'
func value<Bool>() -> Bool {

这可能意味着我不能有不同的协议泛型方法实现,但我没有看到明确的原因。

(我不是说强制类型转换为现有的通用类型阴影)

PS 对于那些好奇的人,我可能会说我正在尝试制作不会与相关类型混淆并且在某种程度上仍然是通用的协议。

标签: swiftgenerics

解决方案


你没有问题,错误是var value,重新声明一个名称为 的函数func value<Bool>,我只是更改了变量名并且它起作用了,错误清楚地表明

错误:“值()”的无效重新声明

class BoolImpl: MyProtocol {
var bool: Bool

init() {
    self.bool = false
}

init(value: Bool) {
    self.bool = value
}

func value<Bool>() -> Bool {
    return self.bool as! Bool
}
}

推荐阅读