2015-11-25 3 views
-2

Как поймать ошибку, если аргумент функции не соответствует типу?Обработка ошибок: не удалось преобразовать тип в Swift 2

Функция:

func returnBool(someBool: Bool) -> Bool { 
    return someBool 
} 

Дано:

returnBool ("не Bool")

Результат:

«Невозможно преобразовать значение типа. .. "

Что я хочу видеть:

ложь, ноль или т.п. + нет ошибки

+0

хорошо, вы говорите компилятор вы ожидали Bool и то вы пытаетесь передать в String - но это просто не работает! Если вы хотите иметь возможность передать строку, вам нужно изменить тип 'someBool' – luk2302

+0

, и это не вопрос, который я задал. в python легко поймать ошибку, прежде чем она выполнит и вернет все, что вы хотите. Я спрашиваю, могу ли я сделать это в Свифте. –

+0

@GaryCooper см. Мой обновленный вопрос, может быть, он может вам помочь – katleta3000

ответ

0

компилятор не позволит вам сделать как этот путь. Если вы хотите проверить некоторые из параметров, который может быть любой объект, а затем использовать AnyObject и проверить его guard заявление:

func returnBool(someBool: AnyObject) -> Bool { 
    guard someBool is Bool else { return false } 
    return true 
} 
let result1 = returnBool("test") // false 
let result2 = returnBool(false) // true 
let result3 = returnBool(1) // true 

или

func returnBool(someBool: AnyObject) -> Bool? { 
    guard someBool is Bool else { return nil } 
    return someBool as? Bool 
} 
let result1 = returnBool("test") // nil 
let result2 = returnBool(false) // false 
let result3 = returnBool(1) // true 
+0

Будьте осторожны !!!!! чтобы иметь возможность компилировать ваши примеры, вам нужно импортировать Foundation и позволить компилятору создавать объекты без Swift, унаследованные от NSObject, которые могут быть перенесены в AnyObject.Type. это может привести к множеству недоразумений и потенциальных ошибок. – user3441734

Смежные вопросы