支持var!?在协议中

时间:2017-03-21 01:20:32

标签: swift swift-protocols

我有3个班级

class A {
    var uid: Int64!
    var countryCode: String? // <-- Attention 
}

class B {
    var uid: Int64!
    var countryCode: String! // <-- Attention
}

class C {
    var uid: Int64!
    var countryCode: String = "AA" // <-- Attention
}

女巫变量例如countryCodeString?String!String

我创建协议,巫婆变种为String?(作为最弱的类型,你可以带来所有其他的)

protocol FullCode {
    var uid: Int64! { get }
    var countryCode: String? { get } // <-- How to describe a variable for all (`T`, `T!`, `T?`) types?
}

extension FullCode {
    var fullCode: String? { return "specificCode"}
}

如果我将它添加到我的班级

extension A : FullCode {}
extension B : FullCode {}
extension C : FullCode {}

我收到B类和B类的错误C.

如何为这些类型使用一种协议?

1 个答案:

答案 0 :(得分:1)

您无法使BC符合FullCode,因为countryCode的类型不兼容。

您无法通过更改FullCode.countryCode的类型来完成此工作,因为StringString!String?没有常见的超类型。< / p>

您需要更改FullCode以声明其他属性。例如:

protocol FullCode {
    var uid: Int64! { get }
    var optionalCountryCode: String? { get }
}

extension A : FullCode {
    var optionalCountryCode: String? { return countryCode }
}

extension B : FullCode {
    var optionalCountryCode: String? { return countryCode }
}

extension C : FullCode {
    var optionalCountryCode: String? { return countryCode }
}