Это не имеет смысла выставлять переменную снаружи на if let
заявление:
if let json = ... {
//This code will only run if json is non-nil.
//That means json is guaranteed to be non-nil here.
}
//This code will run whether or not json is nil.
//There is not a guarantee json is non-nil.
у вас есть несколько других вариантов, в зависимости от того, что вы хотите сделать:
Вы можете поместить остальную часть кода, которая нуждается в json
внутри if
. Вы сказали, что не знаете, являются ли вложенные if
заявления «умными или даже возможными». Они возможны, и программисты используют их довольно часто. Вы также можете извлечь его в другую функцию:
func doStuff(json: String) {
//do stuff with json
}
//...
if let json = ... {
doStuff(json: json)
}
Если вы знаете что JSON никогда не должны быть nil
, вы можете принудительно разворачивать его !
:
let json = ...!
Вы можете сделать переменную global с помощью оператора guard
. Код внутри guard
будет работать только в том случае, если json
isnil
. Тело guard
заявления сусла выходят из области видимости, например, путем бросать ошибку, путем возврата из функции, или с меченым разрывом:
//throw an error
do {
guard let json = ... else {
throw SomeError
}
//do stuff with json -- it's guaranteed to be non-nil here.
}
//return from the function
guard let json = ... else {
return
}
//do stuff with json -- it's guaranteed to be non-nil here.
//labeled break
doStuff: do {
guard let json = ... else {
break doStuff
}
//do stuff with json -- it's guaranteed to be non-nil here.
}