我想给Set结构添加一个扩展,但前提是Set的元素是NSOperations的数组。有可能吗?
我想写这样的东西,但这不是有效的代码:
extension Set where Element : Array<NSOperation> { }
因为type 'Element' constrained to non-protocol type 'Array<NSOperation>
。因此,我想创建一个协议并使用该协议扩展NSOperations数组:
protocol ArrayOfOperations { }
extension Array : ArrayOfOperations where Element : NSOperation { }
[因为Extension of type 'Array' with constraints cannot have an inheritance clause
也不起作用。
所以我有点迷失在这里。您有什么想法,如何解决呢?
由于无法使Array<NSOperation>
符合Hashable
,因此必须制作一个小的包装器结构。
例如
struct NSOperationList {
var operations = [NSOperation]()
}
然后在NSOperationList
之上构建您需要的所有功能。因此,如果您想添加对Set
的支持:
extension NSOperationList: Hashable {
var hashValue: Int {
return operations.reduce(0) { $0 ^ $1.hashValue }
}
}
func == (a: NSOperationList, b: NSOperationList) -> Bool {
return a.operations == b.operations
}
import Foundation
let op = NSOperation()
var arr: Array<NSOperation> = []
arr.append(op)
let set = Set(arr)
我不知道您的麻烦是什么,但是上面的代码片段编译时没有任何麻烦