我可以在Swift中扩展元组吗?

Jea*_*let 14 tuples swift swift-extensions swift-protocols

我想在Swift中为(例如)两个值的元组编写扩展.例如,我想写这个swap方法:

let t = (1, "one")
let s = t.swap
Run Code Online (Sandbox Code Playgroud)

s将是(String, Int)有价值的类型("one", 1).(我知道我可以很容易地实现一个swap(t)函数,但这不是我感兴趣的.)

我可以这样做吗?我似乎无法在extension声明中写出正确的类型名称.

另外,我想答案是一样的,我可以让2元组采用给定的协议吗?

Mar*_*n R 29

你不能在Swift中扩展元组类型.根据 类型,有命名类型(可以扩展)和复合类型.元组和函数是复合类型.

另见(重点补充):

Extensions
Extensions为现有的类,结构或枚举类型添加新功能 .


M. *_*yer 5

正如上面的答案所述,你不能在Swift中扩展元组.但是,不仅仅是给你一个不,你可以做的是将元组包装在一个内部class,struct或者enum扩展它.

struct TupleStruct {
    var value: (Int, Int)
}
extension TupleStruct : Hashable {
    var hashValue: Int {
        return hash()
    }
    func hash() -> Int {
        var hash = 23
        hash = hash &* 31 &+ value.0
        return hash &* 31 &+ value.1
    }
}

func ==(lhs: TupleStruct, rhs: TupleStruct) -> Bool {
    return lhs.value == rhs.value
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,在Swift 2.2中,现在最多包含6个成员的元组Equatable.