我有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
}
女巫变量例如countryCode
为String?
,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.
如何为这些类型使用一种协议?
答案 0 :(得分:1)
您无法使B
或C
符合FullCode
,因为countryCode
的类型不兼容。
您无法通过更改FullCode.countryCode
的类型来完成此工作,因为String
,String!
和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 }
}