这个密码怎么了?它使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一致性移到主结构定义中,这似乎可以避免崩溃。

07-28 03:13
查看更多