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为现有的类,结构或枚举类型添加新功能 .
正如上面的答案所述,你不能在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
.