我無法理解串插在斯威夫特3.如何工作這裏有兩個變量,可選x
和隱含展開可選y
:這兩自選的爲什麼我應該解包隱式解包可選?
let x: Int? = 1
let y: Int! = 2
印刷看起來相當的邏輯:
print(x) // Optional(1)
print(y) // 2
但爲什麼字符串插值以其他方式工作?
print("x: \(x)") // x: Optional(1)
print("y: \(y)") // y: Optional(2)
爲什麼要打開已經打開的可選項?
print("y: \(y!)") // y: 2
假設這裏被用來使用description
屬性Int!
轉換爲String
CustomStringConvertible
協議。但爲什麼這裏沒有y: Optional(2)
?
print("y: \(y!.description)") // y: 2
print("y: \(y?.description)") // y: Optional("2")
print("y: \(y.description)") // y: 2
任何人都可以請解釋嗎?
感謝您的回答,關於第二種情況下'String?'的好處。然而,它並沒有解釋爲什麼'print(「y:\(y)」)'給出'y:Optional(2)'。編輯:重複的標記 – Leo
這是類型系統的一個缺點,正如這個鏈接到的另一個問題所述。希望它得到修復,但我不會因此失眠。只是不要使用隱式解包選項。除了IBOutlets和遞歸關閉之外,他們幾乎沒有任何理由。 – Alexander
有一些原因,主要是因爲Obj-C和Swift的交互。對我而言,這是「初始化期間不能確定的常量」。但是,SE-0054真正將「隱含解包的選擇權」轉變爲「薛定諤自由選擇權」。 – Leo