ios - Swift 惰性初始化不符合协议(protocol)

标签 ios swift swift4.2

我在协议(protocol)中声明了几个 UI 组件。

protocol SomeViewContainer {
    var aView: ACustomizedView
    ...
}

class TestViewController: SomeViewContainer {
    var aView: ACustomizedView!

}

上面的代码不会通过,因为编译器认为 TestViewController 不符合协议(protocol)。

aView 将在从远程获取数据后初始化,所以我不能只删除 !
此外,对于协议(protocol)中声明的其他一些属性,我更愿意像下面这样延迟初始化。

lazy var aView: UIView! = {

    }()

还是编译失败。 关于如何使协议(protocol)符合惰性初始化有什么想法吗?

最佳答案

所以有两个问题,一个是 ACustomizedView! 类型的属性与 ACustomizedView 类型的属性不同,这就是它不符合的原因

其次,你应该能够使用惰性。 那是你的实际代码吗?

惰性初始化使用自执行闭包,因此它会在调用时自动运行闭包代码并为属性提供闭包返回的内容

闭包内没有任何东西的事实会导致它破裂..

您实际上需要从闭包内部返回一个 View

lazy var aView: UIView = {
    let view = UIView()
    // configure view
    return view
}()

关于ios - Swift 惰性初始化不符合协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52751208/

相关文章:

ios - Swift 4.2 类型 'NSAttributedString.Key' 没有成员 'accessibilitySpeechPitch'

ios - 从 nib 文件所有者加载 ViewController

ios - 此处使用 '!' 已弃用,将在未来版本中删除 - swift 4.2

ios - 在 HomeKit 中为 guest 用户设置自定义权限

ios - 为什么带有 subview Controller 的 UIViewController 有时会返回children[0].isEmpty = true?

ios - SplitView Controller 中的委派问题

ios - 使用 Enterprise Distribution Provisioned 应用程序开发 APNS

ios - 图像的 Swift 类型注释

ios - swift 3 [字符串 : AnyObject] Expression was too complex Error

Swift 2 - catch 22 可选类型的值未展开