繁体   English   中英

快速使用协议扩展默认值

[英]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提供的默认值。 这不是协议扩展的重点吗? 无论如何,我想了解为什么这是错误的,以及如何使用默认值。

几乎正确,您的代码有几个问题:

  1. 您无需在LoginErrorContent中声明变量,因为该实现已在ErrorContent扩展中。 再次声明将覆盖扩展实现

  2. 如果要将扩展计算属性用于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM