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。