如果我有一个像...那样的通用结构
struct Blah<T> {
let someProperty: T
}
Run Code Online (Sandbox Code Playgroud)
然后我就可以扩展Blah到符合Equatable时才T是Equatable.喜欢...
extension Blah: Equatable where T: Equatable {
static func == (lhs: Blah, rhs: Blah) -> Bool {
return lhs.someProperty == rhs.someProperty
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我尝试了几种不同的编码方式,但每种方法都给我一个稍微不同的错误.
Mar*_*n R 13
更新:已在Swift 4.1和您的代码中实现了条件一致性
struct Blah<T> {
let someProperty: T
}
extension Blah: Equatable where T: Equatable {
static func == (lhs: Blah, rhs: Blah) -> Bool {
return lhs.someProperty == rhs.someProperty
}
}
Run Code Online (Sandbox Code Playgroud)
在Xcode 9.3中编译并按预期工作.
你在寻找什么
(而这又是"泛型宣言"的一部分).该提案已被Swift 4接受,但尚未实施.从提案:
条件一致性表达了一种概念,即泛型类型仅在其类型参数满足特定要求时才符合特定协议.
一个突出的例子是
extension Array: Equatable where Element: Equatable {
static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}
Run Code Online (Sandbox Code Playgroud)
使等量元素的数组相等,这在目前是不可能的.你的例子基本上就是
struct SomeWrapper<Wrapped> {
let wrapped: Wrapped
}
extension SomeWrapper: Equatable where Wrapped: Equatable {
static func ==(lhs: SomeWrapper<Wrapped>, rhs: SomeWrapper<Wrapper>) -> Bool {
return lhs.wrapped == rhs.wrapped
}
}
Run Code Online (Sandbox Code Playgroud)
从那个提议.
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |