【问题标题】:Swift: Binary operator '==' cannot be applied to two '() -> ()' operandsSwift:二元运算符 '==' 不能应用于两个 '() -> ()' 操作数
【发布时间】:2018-01-31 02:28:51
【问题描述】:

尝试比较两个闭包时出错:

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

我应该怎么做?

例如:

enum SomeEnum {
   case caseOne
   case caseTwo(closure: () -> Void)
}

let e1 = SomeEnum.caseTwo(closure: {
    print("something 1")
})
let e2 = SomeEnum.caseTwo(closure: {
    print("something 2")
})

switch (e1, e2) {
case let (.caseTwo(l), .caseTwo(r)):
    return l == r // Binary operator '==' cannot be applied to two '() -> ()' operands
    break
default: 
    break
}

【问题讨论】:

  • 你为什么要比较两个闭包?
  • @Samah 这是一个枚举案例loading(completion: () -> Void)
  • 请显示枚举的来源以及您如何使用它的示例。
  • @Samah 请查看更新内容
  • 这听起来像是一个 XY 问题。比较e1e2的主要目的是什么?你只是想知道他们是否是同一个案例吗?

标签: swift


【解决方案1】:

如果要比较具有关联值的枚举,则需要单独比较大小写,以便忽略具有关联值的枚举的值。

enum SomeEnum {
    case caseOne
    case caseTwo(closure: () -> Void)
    case caseThree
}

let e1 = SomeEnum.caseTwo(closure: {
    print("something 1")
})
let e2 = SomeEnum.caseTwo(closure: {
    print("something 2")
})

switch (e1, e2) {
    case (.caseOne, .caseOne), (.caseThree, .caseThree):
        print("both something else")
    case (.caseTwo, .caseTwo):
        print("both caseTwo")
    default:
        print("not equal")
}

【讨论】:

  • 请注意,您也可以与其他人一起加入(.caseTwo, .caseTwo)
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多