更新: SE-0143在Swift 4.2中实现了条件一致性.
因此,您的代码现在可以编译.如果你定义Item
为一个结构
struct Item: Equatable { let item: [[Modifications: String]] init(item: [[Modifications: String]]) { self.item = item } }
然后编译器==
自动合成运算符,比较SE-0185 Synthesizing Equatable和Hashable一致性
(Pre Swift 4.1回答:)
问题是即使==
是为字典类型定义的
[Modifications: String]
,该类型也不符合
Equatable
.因此数组比较运算符
public func ==(lhs: [Element], rhs: [Element]) -> Bool
无法应用[[Modifications: String]]
.
一种可能的简洁实现==
了Item
将
func ==(lhs: Item, rhs: Item) -> Bool { return lhs.item.count == rhs.item.count && !zip(lhs.item, rhs.item).contains {$0 != $1 } }
您的代码编译[[String: String]]
- 如果导入了Foundation框架,正如@ user3441734正确地说 - 因为然后[String: String]
自动转换为NSDictionary
符合的
框架Equatable
.以下是该声明的"证据":
func foo(obj :[T]) { print(obj.dynamicType) } // This does not compile: foo( [[Modifications: String]]() ) // This compiles, and the output is "Array ": foo( [[String: String]]() )