当前位置: 首页 > 知识库问答 >
问题:

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

鲁涵映
2023-03-14

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

二进制运算符“==”不能应用于两个()-

我应该怎么做?

例如:

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
}

共有1个答案

单嘉泽
2023-03-14

如果要对具有关联值的枚举进行比较,则需要单独比较案例,以便可以忽略具有它们的枚举的值。

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")
}
 类似资料:
  • 问题内容: 我正在尝试通过以下方式为本地通知注册我的应用程序: 在Xcode 7和Swift 2.0中,出现错误。请帮我。 问题答案: 在Swift 2中,通常要执行此操作的许多类型已更新为符合OptionSetType协议。这允许使用类似数组的语法,并且在您的情况下,可以使用以下语法。 与此相关的是,如果要检查选项集是否包含特定选项,则不再需要使用按位与和nil检查。您可以简单地询问选项集是否包

  • 我正在尝试通过以下方式注册我的本地通知应用程序: 在Xcode 7和Swift 2.0中,I get error

  • 问题内容: 在尝试在Swift 3中执行此代码块时,我遇到了错误:二进制运算符’/’无法应用于两个’Double’操作数 但这有效 为什么第一段代码不起作用? 问题答案: 该错误有点误导。 在第一组代码中,被隐式声明为的数组。因此,任何将值分配给索引的尝试都将需要一个值。 问题在于结果是值,而不是。因此,编译器正在寻找返回的版本。该版本需要两个参数。由于您提供两个参数,因此您会遇到问题中提到的错误

  • 在Swift 2.0中获取此错误。 二进制运算符“|”不能应用于两个UIViewAutoresizing操作数 代码如下:

  • 我在练习一些代码,遇到了一些问题。 这是密码 所有的代码都很好,打印得很好,但是最后一行带来了一个问题。 我以为是macFood。水果是数组。 因为macFood。水果=[水果(名称:“苹果”,容量:1),水果(名称:“香蕉”,容量:2)]工作。 所以我想我可以使用'='运算符添加另一个元素。 但它在最后一行崩溃了,macFood。水果=[水果(名称:“葡萄”,容量:3)] 错误消息为 “二进制运

  • 在Swift 3中,我尝试比较两个项目时出错。 错误显示:二进制运算符“==”不能应用于“Any”类型的操作数?;和“字符串” 在Swift 3中执行此操作的正确方法是什么?