“Swift编程语言”包含以下示例代码:
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
当我将width
隐式更改为Double:
let width = 94.4
为行let widthLabel = label + String(width)
创建编译器错误:
无法使用类型(字符串,字符串)
的参数列表调用“+”
虽然我可以通过调用Double
将String
var转换为width.description
,但我想知道:
String(Integer)
有效但String(Double)
没有?String(var)
和var.description
之间有什么区别吗?答案 0 :(得分:4)
你无法做到这一点的原因是因为String
没有初始值设定项接受double或float,而它实现了所有整数类型的初始值设定项(Int,Uint,Int32)等等。)。
所以@derdida的解决方案是正确的方法。
我不鼓励使用description
属性。 不意味着将double转换为字符串,但提供双重的人类可读文本表示。所以,今天的表现与转换相吻合:
let width = 94.5
println(width) // Prints "94.5"
明天它可以改为不同的东西,例如:
ninety four point five
这仍然是人类可读的,但它并不完全是双重转换为字符串。
此规则适用于实施Printable
协议的所有类型(结构,类等):description
属性应用于描述,而不是<强>转换强>
<强>附录强>
除了使用字符串插值外,我们还可以使用旧的类c字符串格式:
let pi = 3.1415
let piString = String(format: "%0.2f", arguments:[pi])
let message = "Pi is " + String(format: "%0.2f", arguments:[pi])
println(message)
答案 1 :(得分:1)
当你想创建一个字符串值时,我会使用它:
let width:Double = 94.4
let widthLabel = "The width is \(width)"