之前有人问过:
Implementing StringLiteralConvertible on NSURL
但是,changes in Xcode 6.1表示此答案不再正确。到目前为止,这是我的代码:
extension NSURL: StringLiteralConvertible {
typealias ExtendedGraphemeClusterLiteralType = String
typealias UnicodeScalarLiteralType = String
convenience public init(stringLiteral value: StringLiteralType){
self.init(string: value)!
}
convenience public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType){
self.init(string: value)!
}
convenience public init(unicodeScalarLiteral value: UnicodeScalarLiteralType){
self.init(string: value)!
}
}
请注意添加了6.1中引入的unicode标量文字类型。
但是,上面的代码失败有几个原因,最重要的是这个:
初始化程序要求&#init;(stringLiteral :)'只能通过非最终类定义中的
required
初始化程序来满足' NSURL'
表示初始化者应标记为required
。但是,无法在扩展名中定义所需的初始化程序。
除非我弄错了,否则对Swift语言的这些更改使得无法将文字转换功能添加到您自己创建的类型以外的类型。