我试图弄清楚如何使用语法糖来定义Swift类型。就像apple给Array结构提供了两种方式定义它的能力:Array<String>
和[String]
,我如何为MyStruct做同样的事情?
答案 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]
创建集。
同样,您可以实施StringLiteralConvertible
(let r: Regex = "^abc.*def$"
),但无法创建速记let r = /^abc.*def$/
,只有语言设计师才能这样做。