【发布时间】:2015-10-13 15:01:52
【问题描述】:
我正在尝试在 Swift 中创建一个名为 ServiceProviderData 的 NSMutableData 的子类,它将接收两个 NSData 实例,进行一些解析(在下面的示例中过于简化)以创建一个新的 NSData 实例,然后我想打电话给super.init(data: data)。
尝试使用下面的代码来实现这一点给了我:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'***初始化方法-initWithBytes:length:copy:deallocator:无法发送到类Example.ServiceProviderData的抽象对象:创建一个具体实例!'
我读到NSData/NSMutableData 是class cluster 的一部分,所以我的问题是我必须实现哪些方法/属性以及如何快速执行此操作?
class ServiceProviderData: NSMutableData {
init?(originalResponseData: NSData, identityProviderResponseData: NSData) {
// Here I'm just appending the two datas but this has
// been greatly simplified for demonstrative purposes...
let data = NSMutableData(data: originalResponseData)
data.appendData(identityProviderResponseData)
super.init(data: data)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
【问题讨论】:
-
你真的需要一个 NSMutableData 子类吗?你不能在一个扩展或一个单独的类中做吗?
-
@e1985 我可以,但现在我的好奇心已经占据了,所以我很想看看如何实现它
-
好的,下面关于对类集群进行子类化的答案可能对他们有所帮助。我只是想指出在这种情况下子类化不是一个好主意,即使 NSMutableData 不是类集群。