Swift中字符串插值和字符串初始化程序之间的区别

Kaw*_*iKx 9 string swift

我可以使用字符串插值或字符串初始化程序读取int,float,double作为字符串.结果总是一样的.

var a: Int = 2

var c: Character = "e"

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

OR

var d: String = String(a) + String(c)
Run Code Online (Sandbox Code Playgroud)

结果是一样的.d的值为"2e"

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

这就是全部?我在这里错过了什么吗?

vac*_*ama 10

字符串插值"\(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"
Run Code Online (Sandbox Code Playgroud)