我的条件如下。
var hotelType: String = "test"
hotelType==hotelInfo.type!
让我们说hotelInfo
的结构如下所示。
struct HotelInfo : Decodable {
var type: String?
}
由于应用程序崩溃说hotelType
为零,我更新代码如下。
hotelType==(hotelInfo.type!==nil ? "" : hotelInfo.type!)
然而,仍有应用程序崩溃说 致命错误:在解包可选值时意外发现nil
在检查实际数据之前,有没有办法检查nil。
注意:,我有替代解决方案(也可以正常工作),但我确实觉得这是错误的。我要做的是添加另一个变量,将nil设为空白字符串,如下所示,并检查此变量。
struct HotelInfo : Decodable {
var type: String?
var typeFixed: String? {
get {
if (self.type==nil) {
return ""
}
return self.type
}
}
}
&安培;使用此变量
hotelType==hotelInfo.typeFixed!
最重要的
我在内部过滤器中执行此操作,因此我无法使用if let
语句(这是实际代码,但由于数据非常复杂,我给出了上述简单逻辑)
finalArray = finalArray.filter { hotels in
hotels.infos?.contains { roomInfo in
selectedChain.contains { rt in
rt == (roomInfo.hotelChain?.supplierHotelChain!==nil ? "" : roomInfo.hotelChain?.supplierHotelChain!)
}
} ?? false
}
rt == (roomInfo.hotelChain?.supplierHotelChain!==nil ? "" : roomInfo.hotelChain?.supplierHotelChain!)
这是我检查条件的地方。
有人能指出我正确的方向来获得所需的数据。
答案 0 :(得分:2)
是的,这仍然会崩溃,因为强行展开 <input type='text' onchange="validate_function();" />
<script>
function validate_function() {
/*Do your magic here...*/
}
</script>
,然后才会检查它是hotelInfo.type
:
nil
你做完了:
hotelType==(hotelInfo.type!==nil ? "" : hotelInfo.type!)
它会起作用。
相反,请使用nil coalescing operator ??
:
hotelType == (hotelInfo.type == nil ? "" : hotelTypeInfo.type!)
在您的过滤器声明中:
hotelType == (hotelInfo.type ?? "")