swift run在可執行 Swift 包中運行時出現以下錯誤:
zsh: segmentation fault swift run
我已經能夠將代碼歸結為以下內容:
enum MyEnum {
case FirstCase
case SecondCase
case Other
}
struct MyEnumCollection {
private var enums: [MyEnum]
}
extension MyEnumCollection: RangeReplaceableCollection {
public init() {
self.enums = []
}
}
extension MyEnumCollection: Collection {
public var startIndex: Int {
0
}
public var endIndex: Int {
self.enums.count
}
public subscript(position: Int) -> MyEnum {
return self.enums[position]
}
public func index(after i: Int) -> Int {
return self.enums.index(after: i)
}
}
var collection = MyEnumCollection()
collection.append(MyEnum.FirstCase)
分段錯誤發生在append陳述句的最后一行。
有人可以幫我理解為什么會發生這種情況以及我應該如何解決這個問題?
uj5u.com熱心網友回復:
更新
感謝@MartinR 的評論,事實證明,更好的解決方案是replaceSubrange(_:with:)從RangeReplaceableCollection協議而不是append
mutating func replaceSubrange<C>(_ subrange: Range<Int>, with newElements: C) where C : Collection, MyEnum == C.Element {
self.enums.replaceSubrange(subrange, with: newElements)
}
舊解決方案
append()您還需要實施
public mutating func append(_ newElement: MyEnum) {
enums.append(newElement)
}
這個函式有一個默認實作,但它當然不知道你的內部資料源enums,所以它不可用。
展望未來,您可能還需要實作具有默認實作的其他功能。
Array另一件事,我個人在遵守協議時也會使用類的屬性。
public var startIndex: Int {
return enums.startIndex
}
public var endIndex: Int {
return self.enums.endIndex
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447161.html
上一篇:Java多執行緒【三種實作方法】
