我想用延迟初始化添加lazy var myView: MyView = MyView()
子类属性,例如:
let myView = MyView()
但我有一个错误:
无法将值类型'UIView'转换为指定类型'MyView' 我可以使用属性类型修复错误:
{{1}}
或将初始化更改为:
{{1}}
但是为什么Swift无法推断这种类型呢?
答案 0 :(得分:1)
重要的是提供一个类型,如果你被初始化为一个标记为懒惰的变量。
lazy var myView:MyView = MyView()
答案 1 :(得分:0)
我尝试使用自定义类复制问题。并没有发现任何问题。
有一点需要注意的是,当懒惰属性没有自定义(样本中的defaultValue
)时,编译器没有要求我提供显式类型。
但
对于具有自定义(redView
)的属性,我必须提供显式类型。
如果我没有提供明确的类型,这就是我得到的。
无法推断出复杂的闭包返回类型;添加显式类型 消歧
这说得足够清楚,无法推断闭包的返回类型。它看起来很明显,因为我们使用的闭包没有明确的返回类型。
所以我尝试提供一个带有显式类型的闭包,我现在期待现在我不需要为redView
lazy
属性提供显式类型。正如预期的那样,它没有提供懒惰属性的类型。
答案 2 :(得分:0)
如果你为MyView提供init,那么它会没问题。但为什么呢?我花了好几个小时才弄清楚,结果是,等待主人回答。
class MyView: UIView {
init() {
super.init(frame: .zero)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}