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.
| 归档时间: |
|
| 查看次数: |
4171 次 |
| 最近记录: |