2016-11-10 3 views
0

при кодировании JSON, I'm разворачивания материала с if let заявления, но я хотел бы сделать переменную глобально доступнуюСоздание переменного из, если заявления глобального

do { 
    if 
    let json = try JSONSerialization.jsonObject(with: data) as? [String: String], 
    let jsonIsExistant = json["isExistant"] 
    { 
    // Here I would like to make jsonIsExistant globally available 
    } 

даже возможно ли это? Если это не так, я могу сделать заявление if внутри этого, но я не думаю, что это было бы умным или даже возможным.

ответ

1

delclare jsonIsExistant в том месте, где вы хотите. Если вы делаете IOS App, чем выше viewDidLoad() создать переменную

var jsonIsExistant: String? 

то в этой точке использовать его

do { 
    if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], 
    let tempJsonIsExistant = json["isExistant"] { 
     jsonIsExistant = tempJsonIsExistant 
    } 
} 

Это может быть переписано как так, хотя

do { 
    if let json = try JSONSerialization.jsonObject(with: data) as? [String: String] { 
     jsonIsExistant = json["isExistant"] 
    } 
} catch { 
    //handle error 
} 

Если обработано второй способ, тогда вы должны проверить, является ли jsonIsExistant нулем перед использованием, или вы можете развернуть его немедленно с помощью! если вы уверены, что всегда будет поле «isExistant» каждый раз, когда ему удастся стать json.

1

Это не имеет смысла выставлять переменную снаружи на 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 будет работать только в том случае, если jsonisnil. Тело 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. 
} 
Смежные вопросы