我是新的swift.When我聲明一個變量,或者當我得到一個實例的屬性時,我發現「!」和「?」在Objective-C中做這樣的事情很容易,你甚至不知道具有「id」類型的類的類型。爲什麼我們需要!
和?
?如何理解swift中的`!`和`?`?
我想知道設計!
和?
的原因,如何使用them.What是具有可選類型的優勢?
我是新的swift.When我聲明一個變量,或者當我得到一個實例的屬性時,我發現「!」和「?」在Objective-C中做這樣的事情很容易,你甚至不知道具有「id」類型的類的類型。爲什麼我們需要!
和?
?如何理解swift中的`!`和`?`?
我想知道設計!
和?
的原因,如何使用them.What是具有可選類型的優勢?
嗯......
? (Optional)
表明您的變量可以包含一個零值,而! (unwrapper)
表示您的變量必須有一個存儲器(或價值)時使用它(試圖得到一個值從它)在運行時。
主要區別在於,當可選爲零時,可選鏈優雅地失敗,而當可選爲零時,強制解包會觸發運行時錯誤。
爲了反映可選鏈接可以在nil值上調用的事實,即使正在查詢的屬性,方法或腳標返回非選項值,可選鏈接調用的結果也始終爲可選值。您可以使用此可選返回值來檢查可選的鏈接調用是否成功(返回的可選值包含值),或者由於鏈中的零值(返回的可選值爲零)而不成功。
具體而言,可選鏈接調用的結果與預期返回值具有相同的類型,但包含在可選項中。通常返回一個Int的屬性將返回一個Int?通過可選鏈接訪問時可以使用。
var defaultNil : Int? // declared variable with default nil value
println(defaultNil) >> nil
var canBeNil : Int? = 4
println(canBeNil) >> optional(4)
canBeNil = nil
println(canBeNil) >> nil
println(canBeNil!) >> // Here nil optional variable is being unwrapped using ! mark (symbol), that will show runtime error. Because a nil optional is being tried to get value using unwrapper
var canNotBeNil : Int! = 4
print(canNotBeNil) >> 4
var cantBeNil : Int = 4
cantBeNil = nil // can't do this as it's not optional and show a compile time error
Here is basic tutorial in detail, by Apple Developer Committee.
隱式解包的可選*可*爲零... –
從Apple文檔:
你在一個值可能是不存在的情況下使用自選。 可選表示兩種可能性:或者有一個值,並且 可以打開可選項來訪問該值,或者完全不存在 值。
C或Objective-C中不存在optionals的概念。在Objective-C的 最近的事情是從 方法,否則將返回一個對象,以零意義返回無能力「的 沒有有效的對象。」
如果定義了一個可選的變量,而不提供默認值, 變量將自動設置爲無給你:
var surveyAnswer: String?
是否可選包含通過比較鄰一 值可以使用if語句來找出對零的任意性。用「等於」運算符(==)或「不等於」運算符(!=)執行此 比較。
如果選購的具有價值,它被認爲是「不等於」零:
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
一旦你確定了可選確實包含一個值,你可以 通過將感嘆號(!)添加到可選名稱的 末端來訪問其基礎值。感嘆號有效地說:「我 知道這個可選肯定有一個值;請使用「強迫可選的值的展開這 被稱爲:
print("convertedNumber has an integer value of \(convertedNumber!).")
你應該google一下'Optional'在迅速,有很多關於它的文章 – JuicyFruit
我建議蘋果文件https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309。 var用'?'聲明可能有也可能沒有任何價值。聲明的var實例可能是'零'值。 '!'用於確保declare var具有非零值或用值初始化的標記。你可以考慮'!'它表示您擁有聲明變量的責任,並且具有非零值。 –
閱讀下面的答案; - http://stackoverflow.com/questions/24083842/what-is-the-difference-between-string-and-string-two-ways-of-creating-an-opti –