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

时间:2016-07-30 16:13:23

标签: 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"

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

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

1 个答案:

答案 0 :(得分: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"