我只想問如何處理在Swift中的空值的JSON返回。 我用警衛來展開這些值,但是如果JSON的值如下例所示,那麼警衛將不會執行如何處理JSON響應與無使用警衛在Swift
我也想知道使用警衛的正確方法。在一名警衛中使用多重條件可以嗎?就像我在下面的示例代碼?
{
"error_code": "0",
"error_description": [],
"status": true,
"results": {
"id": 25,
"email": "[email protected]",
"created_at": "2016-12-10T15:54:03.779Z",
"updated_at": "2016-12-15T06:41:49.432Z",
"first_name": "Juan",
"last_name": "Cruz",
"middle_name": "Dela",
"nickname": "joe",
"option_nickname": null,
"age": 24,
"gender": "Male",
"mobile_number": "639959283721",
"photo_url": {
"url": null
},
"school": "University of the Philippines",
"user_address": null,
"city": "Quezon City",
"country": null,
"longtitude": 121.0621301,
"latitude": 14.5832954,
"facebook_user_id": null,
"device_token": null,
"token": "YrxVEWUMYxieFy7PEsAn",
"is_sent": false,
"show_nickname": false
},
"error": []
}
這裏是我的代碼:
func UserLogin(facebookID: String) -> Void {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
let urlString = Constants.baseURL + Constants.apiURL + Constants.loginUrl
let params:Dictionary<String, AnyObject> = [
"facebook_id": facebookID as AnyObject
]
Alamofire.request(urlString, method: .post, parameters: params, encoding: JSONEncoding.default)
.validate()
.responseJSON { response in
switch response.result {
case .success:
let userjson = JSON(data: response.data!)
let results = userjson["results"].dictionaryValue
guard let auth_token = results["token"]?.string,
let userid = results["id"]?.int,
let firstname = results["first_name"]?.string,
let lastname = results["last_name"]?.string,
let nickname = results["nickname"]?.string,
let city = results["city"]?.string,
let photo = results["photo_url"]?["url"]else{
//nil
return
}
//The Process will not continue from here if the JSON response has a null value)
self.userdefault.saveUserToken(authToken: auth_token)
self.userdefault.setUserID(userID: userid)
self.userdefault.setuserFirstName(userFName: firstname)
self.userdefault.setuserLastName(userLName: lastname)
self.userdefault.setuserNickName(userNName: nickname)
self.userdefault.setuserCity(userCity: city)
self.GotoMainNavigation()
case .failure(let error):
print("susb \(error)")
self.getFacebookInfo()
}
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
}
謝謝
如果「a」爲空,該怎麼辦?警衛是否會返回其他值? – vidalbenjoe
檢查此: - [http://stackoverflow.com/questions/34051886/swift-guard-else-called-on-dictionary-key-with-null-value] – nick
@vidalbenjoe標記它,如果它對你有幫助 – nick