在Swift中处理可选变量和数组操作的更好方法

问题描述 投票:0回答:2

我有一个以下代码,它复制一个Rider对象数组,并附加一个新的Rider对象(如果存在)。

let riders:[Rider] = getRiders()
let newRider:Rider? = mayGetNewRider()
var ridersPlus = riders
if let rider = newRider {
   ridersPlus.append(rider)
}

我正在寻找一种更好(更简单,更容易阅读)的方式来编写这种逻辑,这也允许我将ridersPlus定义为“let”变量。

我正在寻找下面的东西(这是无效的,因为我编写了???语法,它产生一个空的newRider数组是nil)。

let riders:[Rider] = getRiders()
let newRider:Rider? = mayGetNewRider()
let ridersPlus = riders + [newRider???]
arrays swift optional
2个回答
1
投票

怎么样

let ridersPlus = riders + [newRider].compactMap {$0}

(请注意,在Swift 4之前,compactMap将被称为flatMap。你没有说明你正在使用的Swift版本。)


1
投票

你用map和nil合并算子??做到这一点:

let ridersPlus = riders + (newRider.map {[$0]} ?? [])

调用Optional值时,map在Optional实例不是nil时评估给定的闭包,将未包装的值作为参数传递。如果Optional是nilmap的结果是nil。将其与nil合并运算符组合,生成的Optional数组可以打开或用[]替换,然后添加到riders数组中。

© www.soinside.com 2019 - 2024. All rights reserved.