Прошло много лет с тех пор, как я работал в macOS, и более двух с тех пор, как я коснулся Swift. Я бегу кругами по этому вопросу:
У меня есть две функции, первая содержит цикл while для проверки значения в словаре, возвращаемого второй. :
func checkPath(_ strPath:String) {
...
while bIsDesktop == false {
let dictResults:Dictionary<String, Any> = checkPath(arrPath)
if dictResults["isDesktop"] { //-->I'm getting crushed here
//do something with returned array
}
}
private func checkPath(_ arrPath:Array<String>) -> Dictionary<String, Any> {
var bIsDesktop = false
var arrPath = arrPath
if arrPath[0] != "Desktop" {
arrPath.removeFirst()
} else {
bIsDesktop = true
}
return ["paths":arrPath, "isDesktop":bIsDesktop]
}
arrPath - это массив строк (элементов пути к файлу)
Я знаю, что возвращаемый словарь похож на [String: Any]
Проблема не имеет значениято, что я делаю, я сталкиваюсь с некоторой ошибкой компилятора, например:
Optional type 'Any?' cannot be used as a boolean; test for '!= nil' instead
В более сложной схеме, в случае, если есть более элегантное решение, я пытаюсь сделать это - обрезать путь к папкевыбранный пользователем /// File: User / username / Desktop / ... и просто иметь рабочий стол / ... Если есть лучшее решение, чем то, что я пытаюсь, я был бы рад увидеть его, но если бы вы также могли объяснитьпочему я не могу вывести опционально из словаря, я бы это тоже оценил.
Я пробовал:
guard let bIsDesktop = dictResults["isDesktop" as Bool else { ...
if dictResults?["isDesktop"]...
и другие различные перестановки. Либо я получаю ноль, либо ошибку компилятора.