2016-10-05 2 views
2

Компилятор жалуется на его кусок кода и не знаете, как исправить:Swift 2.1, как создать предикат

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

ответ

3

NSProcessInfo.processInfo().environment возвращает [String : String] словарь.

Чтобы использовать contains в словаре, вам необходимо пройти закрытие, а не строку.

Примеры Swift 2:

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

Чтобы проверить, если ключи содержат вашу строку:

let result = env.contains { $0.0.containsString("UITESTING") } 

или для проверки равенства, например:

let result = env.contains { $0.0 == "UITESTING" } 

Для если значения содержат вашу строку:

let result = env.contains { $0.1.containsString("UITESTING") } 

или равна:

let result = env.contains { $0.1 == "UITESTING" } 

$0 является каждый элемент в словаре, .0 является ключевым и .1 это значение.

Чтобы лучше понять, вот длинная форма синтаксиса:

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

И Swift 3, в случае, если кто-то нуждается в этом:

let env = ProcessInfo.processInfo.environment 
let result = env.contains { $0.key.contains("UITESTING") } 
let result = env.contains { $0.value.contains("UITESTING") } 
let result = env.contains { (key, value) in key.contains("UITESTING") } 
Смежные вопросы