Here是关于同一主题的较旧问题,但它适用于Swfit 1.0。在Swift 1.1中,StringLiteralConvertible
协议已更改为使用初始化程序而不是类方法。此外,[NSURL init(string: String)]
成为可用的初始化程序。
这是我尝试过的,但它并没有在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)
}
}
答案 0 :(得分:4)
协议“StringLiteralConvertible”所需的初始化程序不返回选项,所以放一个?在init之后将无济于事(即使XCode本身暗示它)。但是NSURL 的所有初始值设定项都返回选项,因为参数可能不会产生有效的URL。并且您必须在所有自定义NSURL初始值设定项中调用其中一个super.init初始值设定项。因此,不再可能让NSURL实现“StringLiteralConvertible”。