[英]Swift use protocol extension defaults
我有
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提供的默认值。 这不是协议扩展的重点吗? 无论如何,我想了解为什么这是错误的,以及如何使用默认值。
几乎正确,您的代码有几个问题:
您无需在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) {
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.