我想在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
。
所以我有点迷失在这里。你有什么想法,如何解决这个问题?
答案 0 :(得分:2)
由于你不能使Array<NSOperation>
符合Hashable
,你必须制作一个小的包装结构。
E.g。
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
}
答案 1 :(得分:-1)
import Foundation
let op = NSOperation()
var arr: Array<NSOperation> = []
arr.append(op)
let set = Set(arr)
我不知道你的麻烦是什么,但上面的代码片段编译没有任何问题