我剛開始學習斯威夫特,最近發現了何時使用?,!,None或Lazy?
「正常」 變量(缺乏一個更好的名字):
例如:
var test1: String
「可選」變量
ex:
var test2: String?
「隱無包裝選配」
例如:
var test3: String!
懶變量
例如:
lazy var test4: String
我的理解是這樣的:
使用「可選」變量(?)當變量可能會或可能不會在將來百分點初始化
使用開始初始化「隱無包裝選配」(!)時該變量被保證被初始化
選配可經由被轉換爲無包裝隱選配「強制通過拆」
例如:
let possibleString: String? = "Hello" println(possibleString!)
使用「懶惰變量」時,有沒有必要的東西要設置直到初始化(看來這可以被用於()或()?!)
因此,我的問題是:
什麼時候使用選項1 - 沒有一個變量?沒有!
什麼時候使用通常用於singletons「懶」
我讀「懶」 - 爲什麼?
我在Java和C++術語方面經驗最豐富,如果這有助於我的背景回答。
編輯:這裏的一切,我發現(主要問題是「正常」 VS 「隱無包裝選配」:
- 「正常」 變量必須初始化:(a)在(b)在使用前的相同範圍內(用法表示與對象有某些操作),(c)在末尾的init iff變量是一個字段注意:init的範圍就是一切在類的範圍內,而不在功能範圍內在課堂上。
- 打印隱式解包可選將打印「無」,但使用該變量的函數將引發運行時異常。同時,使用(根本不包括打印)一個正常變量將不允許程序根本編譯
- 使用的目的! 「(Nothing)是(a)由於程序將編譯(並且在變量實際被初始化的情況下正確運行)並且(b)不允許你在開始時初始化所有內容。 注意:如果它是一個正常變量的任何字段未聲明是編譯時錯誤。
啊好吧,我什麼時候可以使用 var test1:String //沒有?和不 ! ? – AeonNeo
你會寫幾千行Swift代碼,並最終找出答案。 – gnasher729
@AeonNeo,這取決於你的設計。如果某物業的「沒有價值」是流量的一部分,則使用「?」。如果它幾乎總是有一個值,除了一些「特殊」期間,當它不會被訪問時,使用「!」。否則堅持「正常」財產。一般來說,如果你可以不使用可選項,就可以不用它們。這些可能有些棘手(尤其是隱含的解包)。 – courteouselk