这个密码怎么了?它使repl和编译器都崩溃(分段错误11)。
这应该是一个微不足道的泛型示例。崩溃似乎是由于扩展添加了arrayliteralconvertible一致性,基类型列表本身工作正常。
struct List<Item> {
private var items: [Item] = []
var count: Int {
return items.count
}
func item(atIndex index: Int) -> Item? {
if index < count {
return items[index]
} else {
return nil
}
}
mutating func add(item: Item) {
items.append(item)
}
mutating func remove(atIndex index: Int) {
if index < count {
items.removeAtIndex(index)
}
}
}
extension List: ArrayLiteralConvertible {
typealias Element = Item
init(arrayLiteral elements: Item...) {
items = elements
}
}
var numbers: List<Int> = [1, 2, 3]
最佳答案
这似乎是一个bug,已经在https://bugs.swift.org/browse/SR-493
作为解决方法,您可以将init(arrayLiteral:)
和ArrayLiteralConvertible
一致性移到主结构定义中,这似乎可以避免崩溃。