我有
protocol ErrorContent {
var descriptionLabelText: String { get set }
}
extension ErrorContent {
var descriptionLabelText: String { return "Hi" }
}
struct LoginErrorContent: ErrorContent {
var descriptionLabelText: String
init(error: ApiError) {
...
}
}
并且xcode抱怨"从初始化程序返回而不初始化所有存储的属性。"我想要的是只使用我在协议扩展中给出descriptionLabelText的默认值。这不是协议扩展的重点吗?无论如何,我想了解为什么这是错误的,以及如何使用我的默认值。
答案 0 :(得分:3)
几乎正确,只是你的代码有几个问题:
您无需在 LoginErrorContent 中声明变量,因为该实现已经在 ErrorContent 扩展名中。再次声明它会覆盖扩展实现
如果要对 descriptionLabelText 使用扩展计算属性,则不能指定它是一个setter,因为它只返回一个值。
示例:
protocol ErrorContent {
var descriptionLabelText: String { get }
}
extension ErrorContent {
var descriptionLabelText: String { return "Hi" }
}
struct LoginErrorContent: ErrorContent {
// Overriding the extension behaviour
var descriptionLabelText: String { return "Hello" }
init(error: ApiError) {
...
}
}