在NSURL上实现StringLiteralConvertible

Jar*_*sen 9 swift

我实施了StringLiteralConvertible,扩展了ExtendedGraphemeClusterLiteralConvertible.看起来它也希望我实现它.然而,当我这样做时,Xcode说它不知道是什么ExtendedGraphemeClusterLiteralType.我不确定它对我有什么要求......

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"
Run Code Online (Sandbox Code Playgroud)

wbe*_*ett 2

该问题与您的扩展不符合协议有关。如果您 CMD+单击 StringLiteralConvertible 协议,按照它的定义,您会发现类型别名 StringLiteralType 和类型别名 ExtendedGraphemeClusterLiteralType 设置为 String。

话虽这么说,您应该将您的扩展修改为以下内容:

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()
   }
}
Run Code Online (Sandbox Code Playgroud)

有关 typealias 的信息在《The Swift Programming Language》一书第 606-609 页的Associated Types部分中进行了描述。