当前位置:  开发笔记 > IOS > 正文

二元运算符'=='不能应用于两个操作数

如何解决《二元运算符'=='不能应用于两个操作数》经验,为你挑选了1个好方法。



1> Martin R..:

更新: 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]]() )

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有