如何快速制作自己的语法糖?

时间:2015-04-09 00:03:23

标签: ios swift

我试图弄清楚如何使用语法糖来定义Swift类型。就像apple给Array结构提供了两种方式定义它的能力:Array​<​String​>[​String​],我如何为MyStruct做同样的事情?

1 个答案:

答案 0 :(得分:4)

你可以而且不能这样做。

您无法使用[String]这样的简写来定义类型。例如,您不能定义新的链接列表,并为其提供‹String›的简写。

可以做的是实施ArrayLiteralConvertible,以便您可以像这样创建列表:

let mylist: List = ["Elsa","Anna"]

实施ArrayLiteralConvertible

struct List<T> {
  // your List implementation
}

extension List: ArrayLiteralConvertible {
    init(arrayLiteral: T...) {
        // populate list from from arrayLiteral
    }
}

Set是执行此操作的类型的示例。数组是默认值,但您可以使用let myset: Set = [1,2,3]创建集。

同样,您可以实施StringLiteralConvertiblelet r: Regex = "^abc.*def$"),但无法创建速记let r = /^abc.*def$/,只有语言设计师才能这样做。