在Swift中初始化的位置?
发布时间:2020-12-14 02:25:06 所属栏目:百科 来源:网络整理
导读:关于 Swift中的Initialization,我有一个非常普遍的问题. 与Objective C不同,现在可以直接在我的函数之外的声明中调用init(): 例如 class ViewController: UIViewController { let myView: UIView = UIView() override func viewDidLoad() { super.viewDidLo
关于
Swift中的Initialization,我有一个非常普遍的问题.
与Objective C不同,现在可以直接在我的函数之外的声明中调用init(): 例如 class ViewController: UIViewController { let myView: UIView = UIView() override func viewDidLoad() { super.viewDidLoad() myView.frame = getFrame() myView.backgroundColor = UIColor.redColor() self.view.addSubview(myView) } func getFrame() -> CGRect { return CGRectMake(0,100,100) } } 在Objective C中我会在我的函数中完成初始化. 但是如果我想调用一个没有设置参数的初始化器怎么办? class ViewController: UIViewController { //THIS IS NOT WOKRING let myView: UIView = UIView(frame: getFrame()) override func viewDidLoad() { super.viewDidLoad() myView.backgroundColor = UIColor.redColor() self.view.addSubview(myView) } func getFrame() -> CGRect { return CGRectMake(0,100) } } 我不想在代码中的两个不同位置进行初始化.初始化是否有任何一般模式?
因此,您在swift中初始化的选择很多.在您当前的示例中,您无法使用方法getFrame(),因为您还没有对self的引用,因为ViewController尚未初始化.相反,你可以使用:
let myView: UIView = UIView(frame: CGRectMake(0,100)) 因为这不需要引用自我.或者你可以懒惰实例化,它将在self可用后运行(这只能用于var not let: lazy var myView: UIView = { return UIView(frame:self.getFrame()) }() 要回答你的问题,当你使用UIKit类时,你通常无法控制它们的实例化,你可以继续这样做,就像你在目标c中一样,并使用implicitly unwrapped选项(以防止你必须使用!或?每一个实例化变量的时间,例如: var myView: UIView! override func viewDidLoad(){ super.viewDidLoad(); myView = UIView(frame:getFrame()) } 然而,这不适用于let常量,因为它们需要立即分配或在对象的构造函数中分配.希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |