這是一個非常簡單的問題,但它一直在困擾着我。根據Swift的說法,將不同類型的值添加到一起是不可能的(比如String和Int),下面的代碼儘管將Date類型和Int類型添加到一起可能會如何工作?在Swift中添加Date類型和Int類型?
let someDate = Date() + 2828282
這是一個非常簡單的問題,但它一直在困擾着我。根據Swift的說法,將不同類型的值添加到一起是不可能的(比如String和Int),下面的代碼儘管將Date類型和Int類型添加到一起可能會如何工作?在Swift中添加Date類型和Int類型?
let someDate = Date() + 2828282
在文檔頁面Date
可以看到 有一個+
運營商採取Date
和TimeInterval
作爲操作數:
返回的日期與添加到其指定的時間量。
static func +(lhs: Date, rhs: TimeInterval) -> Date
所以,你可以添加一個TimeInterval
(這是Double
一個類型別名) 到Date
,但不是一個Int
。您的代碼編譯是因爲2828282
是一個「數字文字」,編譯器可以從 推斷出上下文的類型爲Double
。
這不會編譯:
let delta = 2828282 // an Int
let someDate = Date() + delta
// error: binary operator '+' cannot be applied to operands of type 'Date' and 'Int'
你將不得不轉換Int
爲TimeInterval/Double
let delta = 2828282 // an Int
let someDate = Date() + TimeInterval(delta)
或使delta
一個Double
:
let delta = 2828282.0 // a Double
let someDate = Date() + delta
根據夫特,它不可能爲不同類型的待相加的值(例如
String
和Int
)
不像許多其他語言,有數字類型之間沒有自動轉換,又名數值提升,而大多數預定義的數字運算符都希望兩個操作數的類型相同。
但是在Swift中沒有什麼可以防止操作符被聲明爲具有不同類型的操作數,並且您的示例Date() + 2828282
是預定義操作符使用不同操作數類型定義的一個示例。
所以與Swift的區別在於缺少自動數字促銷,並且組合realVar + intVar
未預先定義。
在許多其他語言中,組合也未預先定義,但存在數字促銷,因此該示例編譯爲realVar + real(intVar)
。
HTH