2014-06-07 19 views
9

Zaimplementowałem StringLiteralConvertible, która rozszerza ExtendedGraphemeClusterLiteralConvertible. Wygląda na to, że chce, żebym to zaimplementował. Kiedy to robię, Xcode mówi, że nie wie, co to jest ExtendedGraphemeClusterLiteralType. Nie jestem pewien, czego chce ode mnie ...Implementowanie StringLiteralConvertible na NSURL

extension NSURL : StringLiteralConvertible { 
    class func convertFromStringLiteral(value: StringLiteralType) -> Self { 
     return self(string: value) 
    } 

    class func convertFromExtendedGraphemeClusterLiteral(value: ExtendedGraphemeClusterLiteralType) -> Self { 
     // Use of undeclared type ExtendedGraphemeClusterLiteralType :(? 
    } 
} 

let url : NSURL = "http://apple.com" 

Odpowiedz

2

Problem jest związany z tym, że rozszerzenie nie jest zgodne z protokołem. Jeśli używasz CMD + Kliknij na protokół StringLiteralConvertible, aby śledzić jego definicję, zobaczysz, że typ StringLiteralType i typealias ExtendedGraphemeClusterLiteralType są ustawione na String.

Mając na uwadze powyższe, należy zmodyfikować przedłużenie następuje:

extension NSURL : StringLiteralConvertible { 

    class func convertFromStringLiteral(value: String) -> Self 
    { 
       //do what you were going to do 
     return self() 
    } 

    class func convertFromExtendedGraphemeClusterLiteral(value: String) -> Self{ 
       //do what you were going to do 
     return self() 
    } 
} 

Informacja o typealias jest opisany w „Swift Programming Language” książki ze stron 606-609, w typach sekcja Associated .

+0

Dzięki. Podsumowując, wszystko, co musiałem zmienić, to użycie 'String' zamiast' StringLiteralType' oraz 'ExtendedGraphemeClusterLiteralType'. Było to trochę nieoczekiwane, ponieważ spodziewałem się, że będę musiał implementować metody w protokole dokładnie tak, jak pojawiły się w definicji protokołu. – Jarsen

+2

Od wersji Swift 1.1 to już nie działa. – kareman

+0

Kontynuacja dla wersji 1.1 można znaleźć tutaj: http://stackoverflow.com/questions/27071880/implementing-stringliteralconvertible-on-nsurl-in-swift-1-1 – hnh