检查没有,仍然崩溃说它的零

时间:2018-06-02 20:08:16

标签: swift null swift4

我的条件如下。

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!)这是我检查条件的地方。

有人能指出我正确的方向来获得所需的数据。

1 个答案:

答案 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 ?? "")