我嘗試在 Swift 中添加一個Int
和Float
文字,它編譯時沒有任何錯誤:
var sum = 4 5.0 // sum is assigned with value 9.0 and type Double
但是,當我嘗試對Int
andFloat
變數做同樣的事情時,我得到了一個編譯時錯誤,我必須將任何一個運算元型別轉換為另一個運算元才能作業:
var i: Int = 4
var f:Float = 5.0
var sum = i f // Binary operator ' ' cannot be applied to operands of type 'Int' and 'Float'
為什么會這樣?它與型別安全有什么關系嗎?
uj5u.com熱心網友回復:
如果你想要雙重結果:
let i: Int = 4
let f: Float = 5.0
let sum = Double(i) Double(f)
print("This is the sum:", sum)
如果你想要 Int 結果:
let i: Int = 4
let f: Float = 5.0
let sum = i Int(f)
print("This is the sum:", sum)
uj5u.com熱心網友回復:
如果var sum = 4 5.0
編譯器自動將 4 轉換為浮點數,因為這是執行操作所需的。如果你寫,也會發生同樣的情況var x: Float = 4
。4 會自動轉換為浮點數。
在第二種情況下,由于您已經明確定義了變數的型別,因此編譯器沒有根據要求進行更改的自由。
如需解決方案,請查看@Fabio 的答案
uj5u.com熱心網友回復:
Swift.org 上的檔案說:
當您宣告具有初始值的常量或變數時,型別推斷特別有用。這通常是通過在您宣告常量或變數時為其分配一個文字值(或文字)來完成的。(文字值是直接出現在源代碼中的值,例如以下示例中的 42 和 3.14159。)
例如,如果您將字面值 42 分配給一個新常量而沒有說明它是什么型別,Swift 會推斷您希望該常量是一個 Int,因為您已經用一個看起來像整數的數字對其進行了初始化:
let meaningOfLife = 42 // meaningOfLife is inferred to be of type Int
同樣,如果你沒有為浮點字面量指定型別,Swift 會推斷你想要創建一個 Double:
let pi = 3.14159 // pi is inferred to be of type Double Swift always
在推斷浮點數的型別時選擇 Double(而不是 Float)。
如果在運算式中結合整數和浮點字面量,則會從背景關系中推斷出 Double 型別:
> let anotherPi = 3 0.14159 // anotherPi is also inferred to be of
type Double 3 的文字值本身沒有明確的型別,因此從作為加法的一部分的浮點文字的存在中推斷出適當的 Double 輸出型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471649.html