2014-06-07 21 views
9

Tôi đã triển khai StringLiteralConvertible, mở rộng ExtendedGraphemeClusterLiteralConvertible. Có vẻ như nó cũng muốn tôi thực hiện điều đó. Tuy nhiên, khi tôi làm, Xcode nói rằng nó không biết ExtendedGraphemeClusterLiteralType là gì. Tôi không chắc chắn những gì nó muốn từ tôi ...Triển khai StringLiteralConvertible trên 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" 

Trả lời

2

Sự cố liên quan đến tiện ích của bạn không tuân theo giao thức. Nếu bạn CMD + Click vào giao thức StringLiteralConvertible, để làm theo nó với định nghĩa của nó, bạn sẽ thấy rằng typealias StringLiteralType và typealias ExtendedGraphemeClusterLiteralType được đặt thành String.

đó đang được nói, bạn nên thay đổi phần mở rộng của bạn như sau:

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() 
    } 
} 

Thông tin về typealias được mô tả trong "Ngôn ngữ lập trình Swift" cuốn sách từ trang 606-609, dưới loại phần Associated .

+0

Cảm ơn. Tóm lại, tất cả những gì tôi phải thay đổi là sử dụng 'String' thay vì' StringLiteralType' và 'ExtendedGraphemeClusterLiteralType'. Đây là một chút bất ngờ, vì tôi mong đợi phải thực hiện các phương thức trong giao thức chính xác như chúng đã xuất hiện trong định nghĩa giao thức. – Jarsen

+2

Tính năng Swift 1.1 này không còn hoạt động nữa. – kareman

+0

Theo dõi cho 1.1 có thể được tìm thấy ở đây: http://stackoverflow.com/questions/27071880/implementing-stringliteralconvertible-on-nsurl-in-swift-1-1 – hnh