Set的扩展,其中element是特定类型的Array

时间:2015-11-27 12:25:46

标签: swift swift2

我想在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

所以我有点迷失在这里。你有什么想法,如何解决这个问题?

2 个答案:

答案 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)

我不知道你的麻烦是什么,但上面的代码片段编译没有任何问题