2014-10-09 44 views
0

我缺少的東西或強制類型轉換是必須的,同時具有不同類型的加號:類型轉換的義務是蘋果斯威夫特

var i:Int=5 
var d:Double=6.0 

var q:Double= i + d // this is error?! 
var w:Double= Double(i) + d // this is ok 
+2

正如書中說:「整型和浮點型之間的轉換類型必須明確:「 – 2014-10-09 15:44:49

+0

但它使我的代碼如此混亂!任何技巧或逃生路線? – AVEbrahimi 2014-10-09 15:45:42

+1

它使您的代碼「如此可預測」。 – Ideasthete 2014-10-09 15:48:58

回答

1

我缺少的東西或類型轉換是必須的,同時具有不同類型的加號:

不,你不會錯過什麼,類型轉換是強制性的。

我認爲算術運算很好,因爲它讓你思考你的類型轉換,但是,相同的規則適用於位移。即

var i: UInt64 = 6 
var j: Int = 3 
var k = i << j // error 

這真的很討厭和錯誤。我已經提出了一個與蘋果公司的錯誤,但他們還沒有做過任何事情。

1

Swift不提供數字類型之間的自動轉換。

通常,您只需執行像您在問題中使用的轉換。

我不建議這樣做,但你可以這樣做:

func +(i:Int, d:Double) -> Double { 
    return Double(i) + d 
} 

let i: Int = 1 
let d: Double = 7.0 
i + d 
// result: 8.0 

您將需要提供大量的覆蓋,以涵蓋所有的基礎。就像我說的,我不推薦它。

+1

注意'1 + 7.0'無論如何都可以工作。 「數字常量和變量的組合規則不同於數字文字的規則,文字值3可以直接添加到文字值0.14159,因爲數字文字本身沒有明確的類型,它們的類型是推斷的只有在它們被編譯器評估的時候。「 – 2014-10-09 15:59:18

+0

@MikePollard好點。我已經更新了我的答案。 – 2014-10-09 16:03:16

-1

我知道這是不安全的,但對於一些大的數學程序,它的確定,使用@Mike波拉德方法覆蓋默認+ & - 運營商:

func + (left: Int, right: Double) -> Double { return Double(left) + right } 
func + (left: Double, right: Int) -> Double { return left + Double(right) } 
func - (left: Int, right: Double) -> Double { return Double(left) - right } 
func - (left: Double, right: Int) -> Double { return left - Double(right) } 
+2

是的,這是非常不安全的,因爲你的'-'超負荷做了添加。 :) – JeremyP 2014-10-09 16:03:38

+1

讓我們都同意永遠不要這樣做:) – 2014-10-09 16:05:35

+0

我要修復代碼。 – JeremyP 2014-10-09 16:07:28