繁体   English   中英

具有UIView子类的惰性属性

[英]Lazy property with UIView subclass

我想用延迟初始化添加UIView子类属性,例如:

import UIKit

class MyView: UIView {}

class Controller: UIViewController {

    lazy var myView = MyView()
}

但是我有一个错误:

无法将值类型'UIView'转换为指定类型'MyView'我可以使用属性类型修复错误:

lazy var myView: MyView = MyView()

或将初始化更改为:

let myView = MyView()

但为什么Swift无法推断这种类型呢?

重要的是提供一个类型,如果你被初始化为一个标记为lazy的变量。

  lazy var myView:MyView = MyView()

我尝试使用自定义类复制问题。 并没有发现任何问题。

需要注意的一点是,当惰性属性没有自定义(样本中的defaultValue )时,编译器没有要求我提供显式类型。 但对于具有自定义的属性( redView ),我必须提供显式类型。 如果我没有提供明确的类型,这就是我得到的。

无法推断出复杂的闭包返回类型; 添加显式类型以消除歧义

这清楚地表明,无法推断闭包的返回类型。 它看起来很明显,因为我们使用的闭包没有明确的返回类型。

在此输入图像描述

所以我试图提供一个显式类型的闭包,我现在期待现在我不需要为redView lazy属性提供显式类型。 正如预期的那样,它没有提供懒惰属性的类型。

在此输入图像描述

如果你为MyView提供init,那么它会没问题。但为什么呢? 我花了好几个小时弄清楚,结果是😭,等待主人回答。

class MyView: UIView {
init() {
    super.init(frame: .zero)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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