gpt4 book ai didi

ios - 在 Swift 中,有没有办法以编程方式添加我可以在整个类中使用的 subview ,而无需可选属性?

转载 作者:搜寻专家 更新时间:2023-11-01 06:20:41 26 4
gpt4 key购买 nike

通常,当我用自己的 subview 创建自定义 View 时,它往往看起来像这样:

class MyView : UIView {

var myButton : UIButton?
var myLabel : UILabel?

override init(frame: CGRect) {
super.init(frame: frame)

//Create the frames and such

myButton = UIButton(frame: myButtonsFrame)
myLabel = UILabel(frame: myLabelsFrame)
}

// Do other things
}

这在技术上是可行的,但它似乎违反了 Swift 中可选值的整个概念。因为我的 subview 总是被创建,所以它们不应该有 ?

但是,因为它们确实存在,所以我经常被迫检查它们是否为 nil 或强制解包,即使我知道它们永远不应该是,如果是,它们应该会在 init 中失败。

有更好的方法吗?

最佳答案

是的,只需切换代码即可:

class MyView : UIView {

var myButton : UIButton
var myLabel : UILabel

override init(frame: CGRect) {
myButton = UIButton(frame: myButtonsFrame)
myLabel = UILabel(frame: myLabelsFrame)

super.init(frame: frame)
}

// Do other things
}

您只需确保在调用 super.init 之前已初始化所有存储的属性。

或者,您可以将属性声明为隐式展开的可选值,如 UILabel!UIButton! 如果您 100% 确定它们在第一次您之前设置了值尝试访问它们的任何属性或函数。

请注意,@tmpz 在评论中所说的是正确的 - 如果您不打算使用 let 而不是 var 将属性声明为常量在 init 之后更改它们的值。

关于ios - 在 Swift 中,有没有办法以编程方式添加我可以在整个类中使用的 subview ,而无需可选属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34728699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com