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

Mar*_*tos 6 ios swift

我试图找出如何使用语法糖定义Swift类型.就像apple给Array结构赋予了两种方式定义它的能力:Array?<?String?>而且[?String?],我如何为MyStruct做同样的事情?

Air*_*ity 6

你可以也不能这样做。

你不能用像[String]. 例如,您不能定义一个新的链表并将其简写为‹String›.

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

let mylist: List = ["Elsa","Anna"]
Run Code Online (Sandbox Code Playgroud)

通过实施ArrayLiteralConvertible

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

extension List: ArrayLiteralConvertible {
    init(arrayLiteral: T...) {
        // populate list from from arrayLiteral
    }
}
Run Code Online (Sandbox Code Playgroud)

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

同样,您可以实现StringLiteralConvertible( let r: Regex = "^abc.*def$"),但您不能创建速记let r = /^abc.*def$/,只有语言设计人员才能做到。

  • 真的,那里有足够的原始语法糖给任何人带来饮食问题...... (4认同)
  • 并告诉他如何定义自己的运算符。 (2认同)