Swift中字符串插值和字符串初始化器的区别

9
我可以使用字符串内插或字符串初始化程序将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()无法在双引号内使用。

就这些吗?我有遗漏什么吗?

1个回答

11

字符串插值"\(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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接