一尘不染

Swift中String插值和String初始化器之间的区别

swift

我可以使用字符串插值或String初始值设定项将int,float,double读取为字符串。结果总是一样的。

var a: Int = 2

var c: Character = "e"

var d: String = "\(a)\(c)"

OR

var d: String = String(a) + String(c)

结果是一样的。d的值为“ 2e”

我发现的唯一区别是,字符串插值()可以在双引号内使用,而String()不能在双引号内使用。

这就是全部?我在这里想念什么吗?


阅读 187

收藏
2020-07-07

共1个答案

一尘不染

字符串插值"\(item)"为您提供了调用description该项目的结果。
String(item)调用String初始化程序并返回一个String值,该值通常与String从字符串插值中获得的值相同,但不能保证。

考虑以下人为的示例:

class MyClass: CustomStringConvertible {
    var str: String

    var description: String { return "MyClass - \(str)" }

    init(str: String) {
        self.str = str
    }
}

extension String {
    init(_ myclass: MyClass) {
        self = myclass.str
    }
}

let mc = MyClass(str: "Hello")
String(mc)  // "Hello"
"\(mc)"     // "MyClass - Hello"
2020-07-07