如何在swift中制作我自己的语法糖?
我试图找出如何使用语法糖定义Swift类型。 就像Apple给Array结构赋予了两种方式定义它的能力: Array
和[String]
,我如何为MyStruct做同样的事情?
你可以而且不能这样做。
您无法使用[String]
类的简写来定义类型。 例如,您不能定义新的链接列表并为其提供‹String›
的简写。
你可以做的是实现ArrayLiteralConvertible
,这样你就可以像这样创建你的列表:
let mylist: List = ["Elsa","Anna"]
通过实现ArrayLiteralConvertible
:
struct List { // your List implementation } extension List: ArrayLiteralConvertible { init(arrayLiteral: T...) { // populate list from from arrayLiteral } }
Set
是执行此操作的类型的示例。 数组是默认值,但您可以使用let myset: Set = [1,2,3]
创建集let myset: Set = [1,2,3]
。
同样,你可以实现StringLiteralConvertible
( let r: Regex = "^abc.*def$"
),但你不能创建一个简写let r = /^abc.*def$/
,只有语言设计者可以这样做。