#swift #nspredicate
#swift #nspredicate
Вопрос:
Компилятор жалуется на свой фрагмент кода и не уверен, как исправить:
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
Ответ №1:
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") }