2014-11-21 2 views
3

Here은 같은 주제에 대해 이전 질문이지만 Swfit 1.0에 대한 것입니다. Swift 1.1에서는 StringLiteralConvertible 프로토콜이 클래스 메서드 대신 이니셜 라이저를 사용하도록 변경되었습니다. 또한 [NSURL init(string: String)]은 초기화 가능한 이니셜 라이저가됩니다.Swift 1.1의 NSURL에서 StringLiteralConvertible 구현

이것은 시도했지만 Xcode 6.1에서는 컴파일되지 않습니다.

extension NSURL: StringLiteralConvertible { 
    convenience public init?(stringLiteral value: String) { 
    self.init(string: value) 
    } 

    convenience public init?(extendedGraphemeClusterLiteral value: String) { 
    self.init(string: value) 
    } 

    convenience public init?(unicodeScalarLiteral value: String) { 
    self.init(string: value) 
    } 
} 

답변

4

"StringLiteralConvertible"프로토콜에서 필요로하는 초기화 프로그램은 옵션을 반환하지 않으므로? init이 도움이되지 않는다면 (비록 XCode가 제안하더라도) 도움이되지 않을 것이다. NSURL 의 모든 이니셜 라이저는 옵션을 반환합니다. 매개 변수가 유효한 URL을 생성하지 않을 수 있기 때문입니다. 모든 사용자 정의 NSURL 초기화 프로그램에서 super.init 초기화 프로그램 중 하나를 호출해야합니다. 따라서 NSURL에 "StringLiteralConvertible"을 구현하는 것이 더 이상 가능하지 않습니다.