Swift 使用函数式编程将一个数组映射到另一个数组
我可以使用什么函数编程ish function map、reduce、zip来替换此for循环的功能?数组具有不同的对象,但元素数相同Swift 使用函数式编程将一个数组映射到另一个数组,swift,Swift,我可以使用什么函数编程ish function map、reduce、zip来替换此for循环的功能?数组具有不同的对象,但元素数相同 @IBOutlet var imageViews: [UIImageView]! photoURLs = ["http://...photo1...", "http://...photo2...", "http://...photo3..."] for (index, photo) in photoURLs.enumerated() { imageVi
@IBOutlet var imageViews: [UIImageView]!
photoURLs = ["http://...photo1...", "http://...photo2...", "http://...photo3..."]
for (index, photo) in photoURLs.enumerated() {
imageViews[index].setImageFromString(string: photo.urlString)
}
更新:大多数评论/答案都适用于我所问问题的第一个版本。现在,我用我的具体案例修改了它
关于重复问题:这个问题不涉及组合两个数组,它指的是将值从一个数组复制到另一个数组,完全相同的索引,但也通过自定义方法进行复制。假设两个数组应该包含相同的元素
let flatMappedNumbers = firstArray.flatMap { $0 }
print(flatMappedNumbers)
let array2 = firstArray
您可以尝试以下方法:
zip(imageViews, photoURLs)
.forEach { $0.setImageFromString(string: $1.urlString) }
有关详细示例:
let views = ["View0", "View1", "View2"]
let urls = ["url0", "url1", "url2"]
zip(views, urls)
.forEach { print("View: \($0), URL: \($1)") }
// Result:
View: View0, URL: url0
View: View1, URL: url1
View: View2, URL: url2
我无法测试我的代码,但可能是
self.imageViews = photoURLs.map()
{
guard let data = NSData(contentsOf: $0), let image = UIImage(data: data)
{
return UIImageView(image: nil)
}
return UIImageView(image: image)
)
假设photoURLs是一个URL数组。为什么在这里使用flatMap?它忽略了nil。如果OP需要保留他的nil呢?让flatMappedNumbers=firstArray.map{$0}@BohdanSavych,wut?如果我用Int->Int函数映射说[Int],我会神奇地得到[Int?]或什么?@Adolfo-请将你的评论作为答案发布。这是正确的答案!你不是说array2aka ImageView是空的吗?若您试图使用空数组下标的结果调用方法,那个么您的时间将非常糟糕。@Teodor Ciuraru您可以发布实际代码而不是伪代码吗?包括您希望调用@TeodorCiuraru的数组可能副本元素的函数,imageViews[index],其中imageViews=[]即使不是零也会导致崩溃,因此您将度过一段不愉快的时光。这是我之前所问问题的正确答案。非常感谢。但我发现我的问题比这复杂了一点,于是我更新了这个问题。这是我想要的正确答案。谢谢不客气!这是苹果公司的参考资料:。谢谢,阿道夫。非常感谢。你们帮我满足了我的好奇心。