簡體   English   中英

Swift中字符串文字中的算術

[英]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

因此,需要將它們顯式轉換為DoubleFloat才能添加在一起。

值永遠不會隱式轉換為另一種類型。

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) + tipcost + Double(tip)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM