Swift中字符串插值和字符串初始值设定项的区别

Swift中字符串插值和字符串初始值设定项的区别,swift,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” 我发现的唯一区别是字符串插值()可以在双引号内使用,而字符串()不能在双引号内使用 就这些吗?我在这里遗漏了什么吗?字符串插值“\(项目)”

我可以使用字符串插值或字符串初始值设定项将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”

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


就这些吗?我在这里遗漏了什么吗?

字符串插值
“\(项目)”
提供对项目调用
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"