在Swift 1.1中的NSURL上实现StringLiteralConvertible

时间:2014-11-21 23:07:40

标签: swift

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

1 个答案:

答案 0 :(得分:4)

协议“StringLiteralConvertible”所需的初始化程序不返回选项,所以放一个?在init之后将无济于事(即使XCode本身暗示它)。但是NSURL 的所有初始值设定项都返回选项,因为参数可能不会产生有效的URL。并且您必须在所有自定义NSURL初始值设定项中调用其中一个super.init初始值设定项。因此,不再可能让NSURL实现“StringLiteralConvertible”。