2016-07-30 5 views
7

文字列補間や文字列初期化を使用して、int、float、doubleを文字列として読み取ることができます。結果は常に同じです。Swiftの文字列補間と文字列初期化の違い

var a: Int = 2 

var c: Character = "e" 

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

OR 

var d: String = String(a) + String(c) 

結果は同じです。 dは値 "2e"を持っています

文字列補間()は二重引用符で使用できますが、String()は二重引用符では使用できません。

これはすべてですか?私はここに何かを逃していますか

答えて

9

文字列補間"\(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"