在Swift中初始化的位置?

在Swift中初始化的位置?,第1张

概述关于 Swift中的Initialization,我有一个非常普遍的问题. 与Objective C不同,现在可以直接在我的函数之外的声明中调用init(): 例如 class ViewController: UIViewController { let myView: UIView = UIView() override func viewDidLoad() { 关于 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中我会在我的函数中完成初始化.

但是如果我想调用一个没有设置参数的初始化器怎么办?
例如
我想用一个在func()中计算的帧初始化

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常量,因为它们需要立即分配或在对象的构造函数中分配.希望这可以帮助.

总结

以上是内存溢出为你收集整理的在Swift中初始化的位置?全部内容,希望文章能够帮你解决在Swift中初始化的位置?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1089479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存