2016-07-30 8 views
7

문자열 보간 또는 문자열 초기화 프로그램을 사용하여 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"를가집니다.

유일한 차이점은 큰 따옴표 안에 문자열 보간법()을 사용할 수 있지만 큰 따옴표 안에는 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" 
:

는 다음과 같은 인위적인 예를 고려