我尝试在Swift文档中找到它的定义,但我不能。
我希望如下:
typealias [] = Array
typealias [Element] = Array<Element>
typealias [AnyObject] = Array<AnyObject>
那么为什么可以使用[]
代替Array
作为初始化程序?
编辑依赖答案:
我尝试对我的自定义Person
类执行相同操作,但它不起作用:
class Person: ArrayLiteralConvertible {
typealias Element
public init(arrayLiteral elements: Self.Element...)
}
let personNames: Person = ["John", "Mark", "Kris"]
答案 0 :(得分:0)
你可以把它写成一个符合文字协议的文字。设置为数组符合ArrayLiteralConvertible
协议,您可以使用相同的数组文字sintax声明一个集合并指定类型以避免编译器混淆,或者仍然将它们推断为Array
:
let set: Set = ["Hello","Bye"]
要符合数组文字协议,您必须提供初始值设定项:
protocol ArrayLiteralConvertible {
typealias Element
init(arrayLiteral elements: Element...)
}
NSHipster上有一篇不错的帖子
文档将文字定义为:
文字是类型值的源代码表示,例如 作为数字或字符串。
首先定义文字的位置?我想这是编译器检测它们的责任,并用适当的类型替换。