- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经习惯了一个永远崩溃的 Swift 编译器,而且通常有很多可用的解决方法。然而这一次我无法成功地使结构符合 MutableCollectionType
。
只要您不取消对 MutableCollectionType
一致性的注释,就可以将附加示例粘贴到 Playground 中。
我避免了所有方法的具体实现以缩小崩溃原因的范围(因此所有的 fatalError()
)。但即使正确实现了这些方法,编译器也会崩溃。
有人知道如何解决此编译器崩溃吗?
struct Test {}
struct TestCollection: CollectionType {
typealias Index = Int
private var values: [Test]
var count: Int {
fatalError()
}
var endIndex: Int {
fatalError()
}
func generate() -> IndexingGenerator<Array<Test>> {
fatalError()
}
var isEmpty: Bool {
fatalError()
}
subscript(bounds: Range<Int>) -> ArraySlice<Test> {
fatalError()
}
subscript(position: Int) -> Test {
get { fatalError() }
mutating set { fatalError() }
}
var startIndex: Int {
fatalError()
}
}
// uncommenting the following line crashes the compiler
// extension TestCollection: MutableCollectionType {}
最佳答案
是的,解决编译器崩溃问题非常困难。不过,有一些技巧很有用。首先,如果您编译它并出现段错误(目前我正在这样做),您仍然可以在 Xcode 中查看错误,它可能会为您提供更多信息。
或者,您可以尝试将崩溃减少到最小工作示例,以查看哪个部分使编译器崩溃。碰巧的是,MutableCollectionType
一致性的最小方法集实际上非常小:
struct Test {}
struct TestCollection: MutableCollectionType {
var startIndex: Int { fatalError() }
var endIndex: Int { fatalError() }
subscript(position: Int) -> Test {
get { fatalError() }
mutating set { fatalError() }
}
}
所以现在我们可以将您的额外内容一一添加回去,直到它崩溃。事实上,typealias
、count
、generate()
和 isEmpty
实际上最好保留出去。 typealias
被推断,count
和isEmpty
可以根据startIndex
和endIndex
计算出来code>(它会和你自己写方法一样高效),并且 generate()
方法可以在集合本身上返回一个 IndexingGenerator
,而不是数组。
所以唯一要加回去的是范围下标:
extension TestCollection {
subscript(range: Range<Int>) -> ArraySlice<Test> {
fatalError()
}
}
仔细观察一下,您可能会写出一些不同的内容:
extension TestCollection {
subscript(range: Range<Int>) -> ArraySlice<Test> {
get { fatalError() }
set { fatalError() }
}
}
没有错误!
请注意:看起来您正在为您的测试
结构在Array
周围实现一个非常轻量级的包装器。由于正确遵循所有必需协议(protocol)的复杂性,您可能最好只是扩展 Array
以提供您需要的功能,或者扩展 MutableCollectionType
像这样:
extension MutableCollectionType where Generator.Element == Test {...
关于swift - 如何在不使编译器崩溃的情况下实现 MutableCollectionType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34043738/
我已经习惯了一个永远崩溃的 Swift 编译器,而且通常有很多可用的解决方法。然而这一次我无法成功地使结构符合 MutableCollectionType。 只要您不取消对 MutableCollec
我在 UIView 上有一个扩展,它返回一个基于元类型的 subview 数组。这样我就可以查询 View 层次结构,例如所有 UITextFields 等。 extension UIView {
我正在尝试向 Card 添加两个方法数组,这样我就可以调用 cardArray.suitSort()或cardArray.rankSort()执行sortInPlace({})括号之间具有适当的比较函
在实现自定义集合类型(并因此使其遵守 CollectionType 协议(protocol))时,我想知道为什么 MutableCollectionType未被 Dictionary 采用类型? 来自
我是一名优秀的程序员,十分优秀!