Swift-如果string为nil。不要将其添加到数组中

时间:2018-07-03 09:16:16

标签: arrays swift

我有Array个链接中的一个Image-

let alamofireSource = [AlamofireSource(urlString: Img1!)!, AlamofireSource(urlString: Img2!)!,
AlamofireSource(urlString: Img3!)!, AlamofireSource(urlString: Img4!)!]
slideshow.setImageInputs(alamofireSource)

有些帖子只有一张图片,或者只有两张或三张,依此类推。因此,有时图像2(例如)为nil,在那种情况下,我不希望将其添加到数组中,这有可能吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试( Swift 4

let arr = [img1,img2].compactMap{$0}.map{AlamofireSource(urlString:$0)!}

let arr = alamofireSource.compactMap{$0}

用于 Swift 3

let arr = alamofireSource.flatMap{$0}

答案 1 :(得分:1)

  

因此,有时图像2(例如)为nil,在那种情况下,我不想   可以将其添加到数组中吗?

是的。尽管我会和Sh_Khan's suggestion一起使用compactMap方法来实现它,但是对于您当前的情况,它将是无用的:

根据您的代码段,我假设类型为alamofireSource的{​​{1}},但是不是 [AlamofireSource],那是因为您是强行展开其元素(通过在其每个元素中添加[AlamofireSource?])。到目前为止,!还不包含nil(实际上,它可能比声明更危险,您的应用可能会崩溃!)

因此,我首先建议从alamofireSource中删除!

alamofireSource

这意味着将其设为let alamofireSource = [AlamofireSource(urlString: Img1!), AlamofireSource(urlString: Img2!), AlamofireSource(urlString: Img3!), AlamofireSource(urlString: Img4!)] ,因此您将获得使用compactMap(_:)的好处:

  

返回一个数组,该数组包含调用给定结果的非nil结果   对该序列的每个元素进行转换。

为:

[AlamofireSource?]

答案 2 :(得分:0)

假设您将Optional url字符串放入一个数组,例如urlStrings(类型为[String?]),则可以根据( Swift 4 ):

alamofireSource

利用map(_:) operator of OptionalcompactMap(_:)来解开两级可选性。

详细信息

您的示例包含两个可选级别:

首先,让我们将可选的图像链接(CapitalFirstLetter)收集到一个数组中

imgX

雨燕4

您可以将map(_:) operator of OptionalcompactMap(_:)结合使用,以安全地展开并利用let urlStrings = [url1, url2, url3, url4] // [String?] 的{​​{1}}整体,然后收集{的失败初始化器的成功调用{1}}:

.some

雨燕3

如果使用Swift 3,请将上面的urlStrings调用替换为flatMap(_:)

AlamofireSource