我有Array
个链接中的一个Image
-
let alamofireSource = [AlamofireSource(urlString: Img1!)!, AlamofireSource(urlString: Img2!)!,
AlamofireSource(urlString: Img3!)!, AlamofireSource(urlString: Img4!)!]
slideshow.setImageInputs(alamofireSource)
有些帖子只有一张图片,或者只有两张或三张,依此类推。因此,有时图像2(例如)为nil,在那种情况下,我不希望将其添加到数组中,这有可能吗?
答案 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 Optional
和compactMap(_:)
来解开两级可选性。
您的示例包含两个可选级别:
let alamofireSource = urlStrings.compactMap { $0.map(AlamofireSource.init) }
的可选ImgX
自变量-以后称为String?
,...,img1
,并保留了img4
的名称例如类型,而不是 instances 。init?(urlString: String, placeholder: UIImage? = nil)
of AlamofireSource
。首先,让我们将可选的图像链接(CapitalFirstLetter
)收集到一个数组中
imgX
您可以将map(_:)
operator of Optional
与compactMap(_:)
结合使用,以安全地展开并利用let urlStrings = [url1, url2, url3, url4] // [String?]
的{{1}}整体,然后收集{的失败初始化器的成功调用{1}}:
.some
如果使用Swift 3,请将上面的urlStrings
调用替换为flatMap(_:)
:
AlamofireSource