在Swift中在何处初始化?
关于Swift中的初始化,我有一个非常普遍的问题。 与目标C不同,现在可以在我的函数之外的声明处直接调用init() e、 g 在目标C中,我将在函数中进行初始化 但是,如果我想用尚未设置的参数调用初始值设定项,该怎么办? 例如 我想用func()中正在计算的帧初始化在Swift中在何处初始化?,swift,initialization,Swift,Initialization,关于Swift中的初始化,我有一个非常普遍的问题。 与目标C不同,现在可以在我的函数之外的声明处直接调用init() e、 g 在目标C中,我将在函数中进行初始化 但是,如果我想用尚未设置的参数调用初始值设定项,该怎么办? 例如 我想用func()中正在计算的帧初始化 我不想在代码中的两个不同位置进行初始化。是否有初始化的一般模式 因此,您在swift中的初始化选项很多。在当前示例中,您还不能使用方法getFrame(),因为您还没有对self的引用,因为ViewController尚未初始化。
我不想在代码中的两个不同位置进行初始化。是否有初始化的一般模式 因此,您在swift中的初始化选项很多。在当前示例中,您还不能使用方法
getFrame()
,因为您还没有对self
的引用,因为ViewController
尚未初始化。相反,您可以使用:
let myView: UIView = UIView(frame: CGRectMake(0, 0, 100, 100))
因为这不需要对self的引用。或者,您可以lazy
实例化,该实例化将在self
可用后运行(这只能用于var
而不是let
:
lazy var myView: UIView = {
return UIView(frame:self.getFrame())
}()
为了回答您的问题,当您使用UIKit类时,您通常无法控制其实例化,您可以像在objective c中一样继续这样做,并使用optionals(以防止每次实例化变量时都必须使用!
或?
,例如:
var myView: UIView!
override func viewDidLoad(){
super.viewDidLoad();
myView = UIView(frame:getFrame())
}
但是,这不适用于
let
常量,因为它们需要立即或在对象的构造函数中分配。希望这能有所帮助。谢谢你的回答!你会怎么做?没有硬性规定,因为它实际上取决于类的类型。我通常在lin中声明所有常量e(即,让
),对带有默认值的值使用惰性变量
,然后尽可能早地在类的生命周期中初始化所有变量。因此在模型类中(例如,用户
或个人
)在UIViewController的init和ViewDiLoad
中。
lazy var myView: UIView = {
return UIView(frame:self.getFrame())
}()
var myView: UIView!
override func viewDidLoad(){
super.viewDidLoad();
myView = UIView(frame:getFrame())
}