2017-07-02 24 views
1

這是一個非常簡單的問題,但它一直在困擾着我。根據Swift的說法,將不同類型的值添加到一起是不可能的(比如String和Int),下面的代碼儘管將Date類型和Int類型添加到一起可能會如何工作?在Swift中添加Date類型和Int類型?

let someDate = Date() + 2828282 

回答

3

在文檔頁面Date可以看到 有一個+ 運營商採取DateTimeInterval作爲操作數:

返回的日期與添加到其指定的時間量。
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' 

你將不得不轉換IntTimeInterval/Double

let delta = 2828282 // an Int 
let someDate = Date() + TimeInterval(delta) 

或使delta一個Double

let delta = 2828282.0 // a Double 
let someDate = Date() + delta 
1

根據夫特,它不可能爲不同類型的待相加的值(例如StringInt

不像許多其他語言,有數字類型之間沒有自動轉換,又名數值提升,而大多數預定義的數字運算符都希望兩個操作數的類型相同。

但是在Swift中沒有什麼可以防止操作符被聲明爲具有不同類型的操作數,並且您的示例Date() + 2828282是預定義操作符使用不同操作數類型定義的一個示例。

所以與Swift的區別在於缺少自動數字促銷,並且組合realVar + intVar未預先定義。

在許多其他語言中,組合也未預先定義,但存在數字促銷,因此該示例編譯爲realVar + real(intVar)

HTH