如果我有一个具有可选属性的协议,以及一个需要符合协议的类,该协议已经具有相同的属性,但作为非可选属性,我如何使该类符合协议。
protocol MyProtocol {
var a: String? { get set }
}
class MyClass {
var a: String
}
extension MyClass: MyProtocol {
// What do I put here to make the class conform
}
不幸的是,你不能在中重新声明相同的变量MyClass
与不同的类型。
丹尼斯的建议是可行的,但是如果你想将变量保留在MyClass
非可选,那么您可以使用计算属性来包装您的存储变量:
protocol MyProtocol {
var a: String? { get set }
}
class MyClass {
// Must use a different identifier than 'a'
// Otherwise, "Invalid redeclaration of 'a'" error
var b: String
}
extension MyClass: MyProtocol {
var a: String? {
get {
return b
}
set {
if let newValue = newValue {
b = newValue
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)