首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查nil,仍然崩溃,说它为nil

检查nil,仍然崩溃,说它为nil
EN

Stack Overflow用户
提问于 2018-06-03 04:08:16
回答 1查看 50关注 0票数 -2

我的情况如下。

代码语言:javascript
复制
var hotelType: String = "test"

hotelType==hotelInfo.type!

让我们假设hotelInfo具有如下结构。

代码语言:javascript
复制
struct HotelInfo : Decodable {
    var type: String?
}

当应用程序崩溃时说hotelType为nil,我更新了如下代码。

代码语言:javascript
复制
hotelType==(hotelInfo.type!==nil ? "" : hotelInfo.type!)

然而,应用程序仍然崩溃,显示致命错误:在解包可选值时意外发现nil

在检查实际数据之前,有没有方法可以检查nil。

注:,我有替代的解决方案(它也工作得很好),但我确信这是错误的。我要做的是添加另一个变量,使空字符串为空,如下所示,并检查这个变量。

代码语言:javascript
复制
struct HotelInfo : Decodable {
    var type: String?
    var typeFixed: String? {
        get {
            if (self.type==nil) {
                return ""
            }
            return self.type
        }
    }
}

使用此变量(&U)

代码语言:javascript
复制
hotelType==hotelInfo.typeFixed!

最重要的

我在过滤器中这样做,所以我不能使用if let语句(这是实际的代码,但我给出了上面的简单逻辑,因为数据非常复杂)

代码语言:javascript
复制
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!)这就是我检查条件的地方。

有没有人能给我指出正确的方向,以获得所需的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 04:19:51

是,这仍然会崩溃,因为您在检查它是否是nil之前强制解开hotelInfo.type

代码语言:javascript
复制
hotelType==(hotelInfo.type!==nil ? "" : hotelInfo.type!)

你已经完成了:

代码语言:javascript
复制
hotelType == (hotelInfo.type == nil ? "" : hotelTypeInfo.type!)

它会起作用的。

相反,请使用nil coalescing operator ??

代码语言:javascript
复制
hotelType == (hotelInfo.type ?? "")

在您的filter语句中:

代码语言:javascript
复制
finalArray = finalArray.filter { hotels in
    hotels.infos?.contains { roomInfo in
        selectedChain.contains { rt in
            rt == (roomInfo.hotelChain?.supplierHotelChain ?? "")
        }
    } ?? false
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50660754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档