Ios 这会导致崩溃吗?或者我们也可以用Swift向nil发送消息。。?

Ios 这会导致崩溃吗?或者我们也可以用Swift向nil发送消息。。?,ios,swift,swifty-json,Ios,Swift,Swifty Json,我正试图说服斯威夫特,并对此表示怀疑 if let cn = respObj["cabNumber"].string where !cn.isEmpty { booking.cabNumber = cn } 我知道这会检查字符串是否为零,但是 如果响应对象中没有cabNumber键和对象对,那么在这种情况下会发生什么。我们使用的是迅捷JSON。它必须是: if let cn = respObj["cabNumber"] as? String where !cn.isEmpty {

我正试图说服斯威夫特,并对此表示怀疑

if let cn = respObj["cabNumber"].string where !cn.isEmpty {
   booking.cabNumber = cn
}
我知道这会检查字符串是否为零,但是 如果响应对象中没有cabNumber键和对象对,那么在这种情况下会发生什么。我们使用的是迅捷JSON。

它必须是:

if let cn = respObj["cabNumber"] as? String where !cn.isEmpty {
      booking.cabNumber = cn
}
在这里,表达式
let cn=respObj[“cabNumber”]as?字符串将检查字典中是否存在键
cabNumber
。第二个表达式
where!cn.isEmpty
检查值是否为空字符串

注意,如果
cabNumber
键存在,但有一个JSON空值,它将返回
NSNull
的实例,而不是nil。

它不会崩溃。你的代码是正确的。 事实上,您正在对键内的值进行有条件的展开

respObj["cabNumber"].string
  • 只有当
    respObj[“cabNumber”]字符串
    是有效的
    字符串时,才会执行
    ,其中
  • booking.cabNumber=cn
    仅在
    respObj[“cabNumber”]时执行。字符串
    是有效的非空
    string
更具体地说:

if let cn = respObj["cabNumber"].string 
   where !cn.isEmpty { // executed only if cn is a a valid String
   booking.cabNumber = cn // executed only if cn is a valid non empty String
}

您正在有条件地展开可选的
if let…
,因此,如果该键不存在,则if语句中的子句将不会执行。请注意,where部分仅在let部分成功时才会执行。因此,在您的情况下,代码不会崩溃,如果cn不存在,它将不会首先计算where部分。在SwiftyJSON中没有这样的
NSNull
.string
是有效的,它是SwiftyJSON的“可选getter”之一。