簡體   English   中英

Swift變量初始化

[英]Swift Variables Initialization

我有一個關於swift變量初始化的問題。

我有兩種方法來初始化變量(作為Objective-C中類的“屬性”)。

哪個是最正確的?

class Class {

  var label: UILabel!

  init() { ... label = UILabel() ... }

}

要么

class Class {

  var label = UILabel()

  init() { … }

}

實際上,您有5種方法來初始化屬性。

沒有正確的方法,方式取決於需求。
基本上聲明像UILabel這樣的對象 - 如果可能的話 - 作為常量( let )。

5種方式是:

  • 聲明行中的初始化

     let label = UILabel(frame:... 
  • init方法中init ,您不必將該屬性聲明為隱式unwrapped可選項。

     let label: UILabel init() { ... label = UILabel(frame:...) ... } 

前兩種方式實際上是相同的。

  • viewDidLoad類的方法中進行初始化,在這種情況下,您必須將屬性聲明為(implicit unwrapped)可選,並且也作為var

     var label: UILabel! on viewDidLoad() ... label = UILabel(frame:...) } 
  • 使用閉包進行初始化以分配默認(計算)值。 在初始化類時調用閉包,並且不可能在閉包中使用該類的其他屬性。

     let label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" return lbl }() 
  • 使用閉包進行延遲初始化。 在第一次訪問屬性時調用(一次)閉包,您可以使用該類的其他屬性。
    該屬性必須聲明為var

     let labelText = "Bar" lazy var label: UILabel = { let lbl = UILabel(frame:...) lbl.text = "Foo" + self.labelText return lbl }() 

兩種方式都是正確的,但有時你應該在init()方法中使用初始化。 例如,這里barButton的target將不會被設置,因為self還不存在。

class Foo {
    var barButton = UIBarButtonItem(title: "add", style: .Plain, target: self, action: #selector(self.someMethod))

    init(){
        //init here
    }
}

這種情況的正確方法是:

class Foo {
    var barButton : UIBarButton? 

    init(){
        barButton = UIBarButtonItem(title: "add", style: .Plain, target: self, action: #selector(self.someMethod))
    }
}

總而言之,兩種方式都是正確的,但您必須考慮何時使用每種方法。 有關Apple文檔的更多信息

 var label: UILabel! 

上述陳述意味着,變量標簽可以是零

var label = UILabel()

但在這里它將持有標簽價值。 因為內存是為該變量分配的。 所以它不會是零。

請在此處查找更多詳細信息

var標簽之間有什么區別:UILabel! 和var label = UILabel()?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM