2015-02-07 72 views

回答

2

在Swift中,您必須明確轉換爲類型,而不是轉換它。 See the document

由於每種數字類型都可以存儲不同範圍的值,因此您必須逐個選擇數字類型轉換。這種選擇加入方式可以防止隱藏的轉換錯誤,並有助於在代碼中顯式地使用類型轉換意圖。

當你有b:Int,可以Double(b),因爲它的轉化率從IntDouble,但你不能b as Doublec: Double = b因爲它的鑄造。

至於var d:Double = a * b,但問題是,有沒有它接受DoubleInt作爲操作數,並返回Double*符實現。

如果你願意,你可以實現重載操作:

func *(lhs:Double, rhs:Int) -> Double { 
    return lhs * Double(rhs) 
} 

var d:Double = a * b // -> 14 

但我不建議這樣做。您應該做明確的轉換

+0

- 問題是沒有接受'Double'和'Int'作爲操作數並返回'Double'的'*'操作符實現。我認爲這是我正在尋找的答案,但對於爲什麼不是這樣的情況感到好奇。 – 2015-02-07 06:59:24

+0

從文檔中添加引用。也許這是回答你的問題? – rintaro 2015-02-07 07:08:35

+0

太棒了!這有幫助。非常感謝。 – 2015-02-07 07:38:50

0

除非是非常精確的情況,否則Swift不會執行自動類型轉換,因此,在混合算術類型時,您必須明確處理轉換。

+0

應該注意這是_intentional_。這不是一個缺少的功能或錯誤,如果你抱怨,Apple不會添加它。 – gnasher729 2015-02-07 08:51:24