作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这段代码有什么问题?它使 REPL 和编译器崩溃(段错误 11)...这应该是一个简单的泛型示例。崩溃似乎是由于扩展添加了 ArrayLiteralConvertible 一致性,基本类型 List 本身工作正常。
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]
最佳答案
这似乎是一个错误,已在 https://bugs.swift.org/browse/SR-493 提交
作为变通方法,您可以将 init(arrayLiteral:)
和 ArrayLiteralConvertible
一致性移动到主结构定义中,这似乎可以避免崩溃。
关于Swift 崩溃(与泛型有关?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531852/
我是一名优秀的程序员,十分优秀!