Ответ 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"