【问题标题】:Swift 3 - Binary operator '==' cannot be applied to two 'MyStruct' operands [duplicate]Swift 3-二元运算符'=='不能应用于两个'MyStruct'操作数[重复]
【发布时间】:2017-01-29 07:45:09
【问题描述】:

我有一个自定义结构...

struct MyStruct {

    let viewController: UIViewController
    let view:UIView

    init(viewController:UIViewController) {
        self.viewController = viewController
    }
}

我有一个数组,然后我想检查这个数组是否包含特定的结构...

let aStruct = someStruct
if structArray.filter { $0 == aStruct } {
   print("do stuff")
}

但我收到错误二元运算符“==”不能应用于两个“MyStruct”操作数...首先,为什么我不能以这种方式过滤结构...其次,如果不是这样,我应该如何搜索数组...

提前致谢

【问题讨论】:

  • struct是否符合Equatable协议。
  • 请注意,即使您将MyStructEquatable 一致,也不能说if structArray.filter { $0 == aStruct } {...} - 请改用contains(_:)

标签: arrays swift filtering


【解决方案1】:

您需要该结构符合Equatable 协议,以允许它确定什么被视为“相等”。

假设如果它们具有相同的 viewController 属性,您认为它们是相等的,您可以这样做:

extension MyStruct: Equatable{}

func ==(lhs: MyStruct, rhs: MyStruct) -> Bool {
    return lhs.viewController == rhs.viewController;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多