Ios 用高阶函数重构给定for-in循环

Ios 用高阶函数重构给定for-in循环,ios,swift,functional-programming,photosframework,Ios,Swift,Functional Programming,Photosframework,给定以下代码: let assetsFetchResult = PHAsset.fetchAssets(in: panoramasCollection, options: fetchOptions) private var pAssets = [PHAsset]() for i in 0..<assetsFetchResult.count { let asset = assetsFetchResult.object(at: i) pAssets.append(asset)

给定以下代码:

let assetsFetchResult = PHAsset.fetchAssets(in: panoramasCollection, options: fetchOptions)
private var pAssets = [PHAsset]()
for i in 0..<assetsFetchResult.count {
    let asset = assetsFetchResult.object(at: i)
    pAssets.append(asset)
}
让assetsfetchfresult=PHAsset.fetchAssets(在:全景集合,选项:fetchOptions中)
专用var pAssets=[PHAsset]()

对于0中的i..不幸的是,PHFetchResult不能像Swift序列一样枚举(即,对于
中的…使用
)。过去,通过巧妙的手段可以做到这一点,但后来他们把结果变成了一个通用结果,并毁掉了它

这更令人沮丧,因为在Objective-C中,您可以在
中用“
for…”枚举它


在Swift中,您只需使用为此目的提供的Cocoa方法(或使用索引)。

不幸的是,PHFetchResult不能像Swift序列一样枚举(即使用
for…In
)。过去,通过巧妙的手段可以做到这一点,但后来他们把结果变成了一个通用结果,并毁掉了它

这更令人沮丧,因为在Objective-C中,您可以在
中用“
for…”枚举它

在Swift中,您只需使用为此目的提供的Cocoa方法(或使用索引)。

诸如
map
filter
等“高阶函数”不适用于
PHFetchResult
,而
assetfetchresult
就是这样的

你可以做:

private var pAssets = [PHAsset]()
assetsFetchResult.enumerateObjects { (asset, index, stop) in
    pAssets.append(asset)
}
诸如
map
filter
等“高阶函数”不适用于
PHFetchResult
,而这正是
assetsFetchResult
所指的

你可以做:

private var pAssets = [PHAsset]()
assetsFetchResult.enumerateObjects { (asset, index, stop) in
    pAssets.append(asset)
}

是的,你能做到!但您需要范围,因为
PHFetchResult
不是集合

let assetsFetchResult = PHAsset.fetchAssets(in: panoramasCollection, options: fetchOptions)
private var pAssets = (0..<assetsFetchResult.count).map(assetsFetchResult.object(at:))
让assetsfetchfresult=PHAsset.fetchAssets(在:全景集合,选项:fetchOptions中)

private var pAssets=(0..是的,您可以这样做!但是您需要范围,因为
PHFetchResult
不是集合

let assetsFetchResult = PHAsset.fetchAssets(in: panoramasCollection, options: fetchOptions)
private var pAssets = (0..<assetsFetchResult.count).map(assetsFetchResult.object(at:))
让assetsfetchfresult=PHAsset.fetchAssets(在:全景集合,选项:fetchOptions中)

private var pAssets=(0..swift中的高阶函数:-map、filter、reduce等…似乎知道像“iterate”这样的函数这将给我闭包中的索引和值。我必须创建自己的吗?你是在问如何在不使用
for I in
循环的情况下填充
pAssets
数组吗?@rmaddy yesss!!!swift中的高阶函数:-map、filter、reduce等…似乎知道“iterate”之类的函数这将给我闭包中的索引和值。我必须创建我自己的吗?你是在问如何在不使用
for I in
循环的情况下填充
pAssets
数组吗?@rmaddy yesss!!!如果有任何问题,我在这个问题上有一个缺陷:如果有任何问题,我在这个问题上有一个缺陷:没有。你不能说
对于AssetFetchResult中的资产
。这就是问题所在。@matt Oops。我被文档声明
PHFetchResult
符合
NSFastEnumeration
的事实所抛弃。我删除了答案的这一部分。是的,以前可以通过利用其NSFastEnumera使PHFetchResult符合序列但是这已经不可能了。正如我所说的,我认为这是一个bug。不。你不能说AssetFetchResult中的资产
。这就是问题所在。@matt Oops。我被文档声明
PHFetchResult
符合
NSFastEnumeration
的事实所抛弃。我删除了answe的那部分r、 是的,以前可以通过利用其NSFastEnumeration一致性使PHFetchResult符合序列。但现在不可能了。正如我所说,我认为这是一个bug。