我将我的字符串声明为
var firstName = String()
我从解析的JSON内容中分配值,例如
firstName = json["first_name"].stringValue
但有时候,JSON响应中可能有空值而应用程序崩溃了,我读到了关于guard语句和if语句来检查空值,但这需要更改声明格式,无法找到在不改变声明格式的情况下处理此错误的正确方法。
因为我已经在我的应用程序中声明了类似格式的所有变量,更改需要时间,我即将上传我的应用程序,这是我的第一个swift应用程序,如果我的声明格式错误请回答为什么会这样,有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
Swift 4的代码:
请记住,当您使用" .stringValue"时,它几乎与使用"!"这将迫使一无所事。
if let firstName = json["first_name"]as? String {
//do stuff like
self.firstName = firstName
}
如果它不是null并且可以是一个字符串,那么这将打开它到你可以得到的值。
Guard let对此非常有好处,因为你可以在开头考虑它,你可以认为它对于整个范围来说都不是可选的。
guard let firstName = json["first_name"]as? String else {return}
self.firstName = firstName
此外,您可以随时检查一行中的空值,并在出现零值时指定默认值。
self.firstName = (json["first_name"]as? String) ?? "Default String"
答案 1 :(得分:1)
您也可以使用保护声明,
guard let firstName = json["first_name"] else {
print("FirstName is Empty")
return
}
或者您也可以查看,
if let firstName = json["first_name"] {
//Your code goes here
}
答案 2 :(得分:1)
您可以使用下一个声明:
guard let firstName = json["first_name"].stringValue else { // Do sth if nil }
// Do sth if not nil
或者您可以使用您编写的语句,但是您应该检查变量
firstName
喜欢这样:
guard firstName != nil else { // Do sth if nil }
// Do sth if not nil
或者
if firstName != nil {
// Do sth if not nil
}
答案 3 :(得分:0)
您可以通过以下方式执行此操作:
if let dictionary = json {
if let fName = dictionary["first_name"] {
firstName = fName as? String
}
}
答案 4 :(得分:0)
我邀请您使用x = float(input("Enter the first number: "))
y = float(input("Enter the second number: "))
z = float(input("Enter the third number: "))
if x >= y and x >= z:
maximum = x
elif y >= z and y >= x:
maximum = y
else:
maximum = z
print("The maximum no. b/w : ", x, ",", y, "and", z, "is", maximum)
。函数SwiftyJSON
始终返回stringValue
个对象。 String
是不可能的。nil
。这听起来像无效的JSON格式的响应数据,因此它崩溃了。
我的代码段。
// Alarmofire + SwiftyJSON
let request: DataRequest = ...//< Configure Alarmofire DataRequest
request.response() { (resp) in
if let error = resp.error {
// TODO: Error handle
return
}
if (response.data == nil) {
// TODO: error handle for empty data?
return
}
assert(response.data != nil, "In this place, the `data` MUST not be nil.")
let json = try? JSON(data: response.data!)
if (json == nil) {
// TODO: Error handle for invalid JSON format.
// If json is nil, then `json["first_name"]` will lead to crash.
return
}
// TODO: parse json object
let firstNameStr = json["first_name"].stringValue
}