安全地展开可选值

时间:2017-09-08 08:06:09

标签: ios swift

我正在使用此代码创建一个新的颜色数组。一切都很好。

但我不想强制解包$0.color!,因为有时当价值为零时,应用会崩溃。

如何将其作为选项保留?如果我只是删除!我收到错误,要求我打开它。

let newArray = oldDict.map{ UIColor(hexString: $0.color!)}

2 个答案:

答案 0 :(得分:6)

您应该使用compactMap而不是map,因为compactMap不返回nil的元素,并且在封闭中只使用guard let语句展开颜色

let newArray = oldDict.compactMap {
    guard let color = $0.color else {
        return nil
    }

    return UIColor(hexString: color)
}

答案 1 :(得分:2)

以下是一些方法:

let newArray1 = oldDict
    .filter({ $0.color != nil })
    .map({ UIColor(hexString: $0.color! )})

let newArray2 = oldDict
    .flatMap({ $0.color })
    .map({ UIColor(hexString: $0) })