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

问题描述 投票:0回答:2

我想给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也不起作用。

所以我有点迷失在这里。您有什么想法,如何解决呢?

swift swift2
2个回答
2
投票

由于无法使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
}

-1
投票
import Foundation

let op = NSOperation()
var arr: Array<NSOperation> = []
arr.append(op)
let set = Set(arr)

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

© www.soinside.com 2019 - 2024. All rights reserved.