Ios 避免隐式展开变量
我有个问题要问你们。我试图避免使用隐式展开变量,但我还没有弄明白怎么做。下面是我的隐式展开示例Ios 避免隐式展开变量,ios,iphone,swift4,xcode9.2,Ios,Iphone,Swift4,Xcode9.2,我有个问题要问你们。我试图避免使用隐式展开变量,但我还没有弄明白怎么做。下面是我的隐式展开示例 class MyView : UIView { @IBOutlet var button : UIButton! var buttonOriginalWidth : CGFloat! } 有没有一种方法可以避免隐式展开 非常感谢您的帮助。您可以通过添加?称为可选而不是!强制展开变量,例如: @IBOutlet var button : UIButton? 对于从故事板连接的插座,
class MyView : UIView {
@IBOutlet var button : UIButton!
var buttonOriginalWidth : CGFloat!
}
有没有一种方法可以避免隐式展开
非常感谢您的帮助。您可以通过添加?称为可选而不是!强制展开变量,例如:
@IBOutlet var button : UIButton?
对于从故事板连接的插座,它是一个有效的添加点,实际上它并不阻止您这样做,但默认情况下,它是从故事板连接的插座的选项。对于一个变量:
var buttonOriginalWidth : CGFloat?
要使用可选的a变量,您需要首先检查它实际上是否仍然为零,使用if let或guard let,如下所示:
if let widthIsValid = buttonOriginalWidth {
// use the widthIsValid here
}
如果您尝试在不强制展开的情况下使用变量,应用程序至少不会崩溃,例如,do like会像可选(478431)
那样打印:
我建议您阅读Swift中的可选链接。- 如果是插座,不要避开它
是有意的。如果代码崩溃,则会显示设计错误(未连接插座)@IBOutlet var button : UIButton!
- 对于正则变量,特别是标量类型和字符串,将其声明为非可选
var buttonOriginalWidth : CGFloat = 0.0
基本上,对于无法通过
init
初始化但第一次使用时应具有值的出口和变量,仅使用隐式展开选项。这取决于您——开发人员——仔细处理这些案例。在所有其他情况下,如果变量需要可选,请使用常规可选(?
)。可以通过以下方式避免隐式展开选项:
var buttonOriginalWidth: CGFloat = 20.0
init
中声明其值:
var buttonOriginalWidth: CGFloat
init() {
self.buttonOriginalWidth = 20
super.init()
}
var buttonOriginalWidth: CGFloat?
但这当然意味着你下次打电话时必须自己打开它lazy
声明在init
之后设置的属性@IBOutlet
和@IBAction
大部分声明为隐式展开选项
@IBOutlet var button: UIButton!
因为如果您正确地配置了故事板,它将永远不会成为
nil
谢谢您的示例和解释。但我的后续问题是,在这种情况下,您将如何执行var viewController:viewController代码>
@IBOutlet var button: UIButton!