swift - 无法将 double 转换为字符串

标签 swift

“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): 行创建编译器错误:

Cannot invoke '+' with an argument list of type (String, String)



虽然我可以通过调用 width.descriptionDouble var 转换为 String,但我想知道:

  1. 为什么 String(Integer) 有效,但 String(Double) 无效?
  2. 在数字类型(Integer、Float、Double 等)上调用 String(var)var.description 之间有什么区别吗?

最佳答案

你不能这样做的原因是因为 String 没有接受 double 或 float 的初始值设定项,而它实现了所有整数类型的初始值设定项(Int、Uint、Int32、等)。

所以@derdida的解决方案是正确的方法。

我不鼓励使用description属性。它意味着将 double 转换为字符串,而是提供人类可读的 double 文本表示。因此,尽管今天的表示与转换一致:

let width = 94.5
println(width) // Prints "94.5"

明天可以更改为不同的内容,例如:

ninety four point five

这仍然是人类可读的,但它并不完全是 double 到字符串的转换。

此规则对于实现 Printable 协议(protocol)的所有类型(结构、类等)均有效: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)

关于swift - 无法将 double 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38081711/

相关文章:

ios - ScrollView 中的 Refreshcontrol 无法快速工作

ios - CollectionView 在 StackView 中消失(Swift)

ios - 如何播放我保存到用户手机 Swift 的音频文件

xcode - 在 Swift 中仅以横向模式打开相机和库

SwiftUI 协调器不更新包含 View 的属性

ios - 从 Nib 文件移动后如何显示 UITabBarController

ios - 带动画的自动布局 View

swift : Query Dictionary using value

ios - NSDate 在 iOS 8.4 和 9.3 版本的模拟器上崩溃少于 5s

ios - 尝试在iPhone上运行应用时,Xcode错误达到最大应用限制