如果我有一个通用的结构像…
struct Blah<T> {
let someProperty: T
}
然后我可以扩展Blah
为Equatable
仅当T
is 时才符合Equatable
。喜欢…
extension Blah: Equatable where T: Equatable {
static func == (lhs: Blah, rhs: Blah) -> Bool {
return lhs.someProperty == rhs.someProperty
}
}
这可能吗?
我尝试了几种不同的编码方式,但是每种方式都给我一个略有不同的错误。
更新: 条件一致性已在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
}
}
可以按照Xcode 9.3的要求进行编译和工作。
您正在寻找的是
(这又是“泛型宣言”的一部分)。该提案已被Swift 4接受,但尚未实施。从提案中:
条件一致性表示这样的概念,即泛型类型仅在其类型参数满足某些要求时才符合特定协议。
一个突出的例子是
extension Array: Equatable where Element: Equatable {
static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... }
}
使相等的元素数组相等,这是当前不可能的。您的例子本质上是
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
}
}
从那个建议。
问题内容: 是否可以为特殊/构造的泛型类型扩展泛型类?我想使用一种方法来扩展Int Arrays,以计算其元素的总和。 例如 问题答案: Swift 5.x:
如何使类示例推断类型基于实例值检查: 打字沙盒。
问题内容: 我正在使用Swift 4并尝试解析一些JSON数据,这些数据显然在某些情况下对于同一键可能具有不同的类型值,例如: 和 我实际上坚持定义我的名字,因为我不知道如何处理这种情况,因为 抛出,自然, 相应地抛出。 定义我时如何处理这种(和类似的)情况? 问题答案: 尝试对Reddit列表JSON响应上的“已编辑”字段进行解码/编码时遇到了相同的问题。我创建了一个结构,该结构表示给定键可能存
6.3. 通过嵌入结构体来扩展类型 来看看ColoredPoint这个类型: gopl.io/ch6/coloredpoint import "image/color" type Point struct{ X, Y float64 } type ColoredPoint struct { Point Color color.RGBA } 我们完全可以将ColoredPoin
问题内容: 我想为此创建一个扩展名,仅影响… 我了解这些说明是相关的,但不确定如何: 扩展通用类型时,不提供类型参数列表作为扩展定义的一部分。而是在扩展程序的正文中提供原始类型定义的类型参数列表,并且原始类型参数名称用于引用原始定义的类型参数。 基本上,我正在尝试使用此方法: 在没有参数的情况下采取行动…这可能吗? 问题答案: Swift 3.1更新 从Swift 3.1(Xcode 8.3 be
问题内容: 我有一个用swift编写的CustomViewController类和用Objective C编写的CustomNavigationController类。我试图将CustomNavigationController作为属性添加到我的CustomViewController中。我已经添加到我的桥接头中。 在我的CustomViewController中,我有: 在尝试构建并运行之前没有