Swift 2.1 如何创建谓词

Swift 2.1 how to create predicate

编译器抱怨他的代码段并且不确定如何修复:

NSProcessInfo.processInfo().environment.contains("UITESTING")

它抱怨它 cannot convert value of type STring to expected argument type '@noescape((String, String)) throws -> Bool

我正在使用 Xcode 7.3.1 和 Swift 2.2

NSProcessInfo.processInfo().environment returns 一个 [String : String] 字典。

要在字典上使用 contains,您必须传递闭包,而不是字符串。

Swift2 的示例:

// This is just to make the answer easier to read
let env = NSProcessInfo.processInfo().environment

测试 keys 是否包含您的字符串:

let result = env.contains { [=11=].0.containsString("UITESTING") }

或测试是否相等,例如:

let result = env.contains { [=12=].0 == "UITESTING" }

测试是否包含您的字符串:

let result = env.contains { [=13=].1.containsString("UITESTING") }

或等于:

let result = env.contains { [=14=].1 == "UITESTING" }

[=20=]是字典中的每一项,.0是键,.1是值。

为了更好地理解,这里是长格式语法:

let result = env.contains { (key, value) in key.containsString("UITESTING") }

并且在Swift3中,以防有人需要它:

let env = ProcessInfo.processInfo.environment
let result = env.contains { [=16=].key.contains("UITESTING") }
let result = env.contains { [=16=].value.contains("UITESTING") }
let result = env.contains { (key, value) in key.contains("UITESTING") }