我可以帮您翻译成中文:
然而,如果我尝试使用数组字面量:
我正在尝试创建一个支持数组字面量初始化的NSMutableArray
子类,使用Swift语言。
我可以创建一个简单的子类:
class MyArray: NSMutableArray {
}
初始化工作正常:
let arrayInstance: MyArray = MyArray()
然而,如果我尝试使用数组字面量:
let arrayInstance: MyArray = ["one"]
它在运行时失败,[NSMutableArray initWithCapacity:]
方法仅为抽象类定义。
我可以添加此初始化器,但是作为结果,我还必须添加其他所需的初始化器:
class MyArray: NSMutableArray {
override init(capacity numItems: Int) {
super.init(capacity: numItems)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
required convenience init(arrayLiteral elements: AnyObject...) {
fatalError("init(arrayLiteral:) has not been implemented")
}
}
很不幸,第二个必需的初始化器会产生以下编译错误:
扩展声明目前无法被覆盖
看起来我卡住了!有人能提供一种创建支持数组字面量的 NSMutableArray
子类的方法吗?否则我要回到 Objective-C!
NSMutableArray
的实现方式(你想要的init来自于NSArrayCreation
类别,而不是类本身),这可能无法在Swift中完成。如果你是其他人,我会讲一堂关于不要子类化类簇除非你深刻了解它们的内容(即使你知道了也不要这样做,因为这很疯狂并且总是会带来麻烦),但在你的情况下,我认为你知道这一点,所以我只是好奇为什么你要子类化NSMutableArray
。 - Rob NapierNSMutableArray
的原因是我想要一个可观察的数组(就像观察者模式中的那样)。我之前在Objective-C中使用过它,以便更轻松地将动态数据绑定到表视图上(http://www.scottlogic.com/blog/2014/11/04/mutable-array-binding-reactivecocoa.html)。不幸的是,我一直遇到障碍!不能子类化Array,因为它是一个结构体,创建自己的结构体会导致ObjC互操作问题(它没有自动桥接),因此选择了第三个选项!第四个选项是在ObjC中编写此代码;-) - ColinENSArrayController
的思路相同(它也是HAS-A而不是IS-A)。避免了类簇的所有麻烦。 - Rob Napiercount
)中添加一个属性观察器吗?我认为你可以在Array的扩展中实现这个功能,不是吗? - wltrup