[英]arithmetic within string literal in Swift
在玩Swift時,我發現了一個尷尬的錯誤。
let cost = 82.5
let tip = 18.0
let str = "Your total cost will be \(cost + tip)"
如我所料,這運作良好,但是
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(cost + tip)"
不會出現錯誤
could not find member 'convertFromStringInterpolationSegment'
let str = "Your total cost will be \(cost + tip)"
兩個示例之間的區別是聲明筆尖常量是否顯式浮動。 這是合理的結果嗎?
您仍然需要將數字轉換為相同的類型,以便可以將它們加在一起,例如:
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(Float(cost) + tip)"
默認情況下,實數文字推斷為Double
,即:
let cost:Double = 82.5
因此,需要將它們顯式轉換為Double
或Float
才能添加在一起。
值永遠不會隱式轉換為另一種類型。
let cost = 82.5
let tip:Float = 18
let str = "Your total cost will be \(cost + tip)"
在上面的示例中,它考慮到成本為兩倍,並且您已將小費定義為浮動,因此出現錯誤。
而是將費用類型指定為浮動費用,如下所示
let cost:Float = 82.5
希望它能解決您的問題。
在您的代碼cost
中推斷為Double
類型。
在您的第一個(可行的)示例中, tip
也被推斷為Double
,而表達式cost + tip
是兩個Double
值的加法,從而得出Double
值。
在您的第二個示例(不起作用)中, tip
被聲明為Float
因此表達式cost + tip
是一個錯誤。 該錯誤信息不是很有用。 但是問題在於,您正在向Float
中添加Double
,並且使用強靜態類型化語言將不會像在C或Objective C中那樣具有自動類型轉換。
您必須執行Float(cost) + tip
或cost + Double(tip)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.