swift - 尝试在 Swift 闭包中将类型添加到速记参数名称

标签 swift closures

我有下面的代码片段,编译器告诉我: 没有更多上下文,表达式类型不明确。我曾尝试在 !$0 之前添加 [Term] 但它没有用,我也尝试解构闭包但是 !zip 给我带来了很多麻烦。我该如何解决这个问题?

extension Statement : Equatable {}
func == (lhs: Statement, rhs: Statement) -> Bool {
  return lhs.terms.count == rhs.terms.count
    && !zip(lhs.terms, rhs.terms).contains { !$0.isEqualTo($1) }
}

最佳答案

鉴于您自己写的答案,我假设 Term 等于 Term 当且仅当它们的属性 value 相等且条款a 语句均等排序

这适用于 Swift 2 的 playground

import UIKit

class Statement {
    var terms: [Term] = []
}

struct Term {
    var value: Int
}

extension Statement : Equatable {}
func == (lhs: Statement, rhs: Statement) -> Bool
{
    guard lhs.terms.count == rhs.terms.count else {
        return false
    }
    for case let tuple in zip(lhs.terms, rhs.terms) where tuple.0.value != tuple.1.value {
        return false
    }

    return true
}

let statement1 = Statement()
statement1.terms = [Term(value: 1), Term(value: 4), Term(value: 4)]

let statement2 = Statement()
statement2.terms = [Term(value: 1), Term(value: 4), Term(value: 4)]

print(statement1 == statement2 ? "They're equal" : "They're Not equal")

// prints They're equal

如果你想在 Statement 中支持未排序的术语,在 Term 中有一个 id 很重要,而且一个 Statement 不能有一个重复 Therm,按照这些规则,这将起作用:

import UIKit

class Statement {
    var terms: [Term] = []
}

struct Term {
    var id: Int
}

extension Statement : Equatable {}
func == (lhs: Statement, rhs: Statement) -> Bool {
    guard lhs.terms.count == rhs.terms.count else {
        return false
    }
    for case let leftTerm in lhs.terms where !rhs.terms.contains({ leftTerm.id == $0.id }){
        return false
    }

    return true
}

let statement1 = Statement()
statement1.terms = [Term(id: 6), Term(id: 1), Term(id: 4)]

let statement2 = Statement()
statement2.terms = [Term(id: 1), Term(id: 4), Term(id: 6)]

print(statement1 == statement2 ? "They're equal" : "They're Not equal")

// prints They're equal

希望对你有帮助:D

关于swift - 尝试在 Swift 闭包中将类型添加到速记参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030303/

相关文章:

快速停止循环并使用按钮继续

swift - 使用 NSRegularExpression 在 (.*) 中获取匹配字符串

javascript - 闭包问题和别处定义的方法

xcode - Swift:来自 switch 语句的未解析标识符

rust - 我不安全的唯一选择是传递对此方法的引用以期望关闭吗?

rust - 如何在闭包和函数之间传递参数?

arrays - json转key-->value格式

ios - 从Firebase调用数据所需的完成处理程序?

ios - 如何在加载之前将数据从选项卡栏 Controller 传递到每个选项卡?

ios - 使用 NSURL 的结果填充 UIView