gpt4 book ai didi

swift - 使用功能技术来发现 NSIndexPath

转载 作者:可可西里 更新时间:2023-11-01 00:52:53 28 4
gpt4 key购买 nike

必须使用 mapfilterreduce 和其他 friend 以一种更具表现力的方式来做到这一点。

背景:
categories 属性是一个 [Category]?,其中每个元素都有一个类型为 [Video]videos 属性.

我正在尝试查找 video 的索引路径。

    var indexPath: NSIndexPath?
for var i = 0; i < categories?.count ; ++i {
for var j = 0; j < categories?[i].videos.count ; ++j {
if categories?[i].videos[j] == video {
indexPath = NSIndexPath(forRow: j, inSection: i)
}
}
}

if let indexPath = indexPath {
tableView.reloadRowsAtIndexPaths([ indexPath ], withRowAnimation: UITableViewRowAnimation.Automatic)
}

最佳答案

可能的解决方案(用 Swift 2 编写):

let indexPaths = categories?.enumerate().flatMap() { (section, aCategory) in
aCategory.videos.enumerate().filter() { (_, aVideo) in
aVideo == video
}.map { (row, _) in
NSIndexPath(forRow: row, inSection: section)
}
} ?? []

indexPaths所有 匹配索引路径的数组(或空数组)。如果您不需要/喜欢那样,请使用

let indexPath = categories?.enumerate().flatMap() { (section, aCategory) in
aCategory.videos.enumerate().filter() { (_, aVideo) in
aVideo == video
}.map { (row, _) in
NSIndexPath(forRow: row, inSection: section)
}
}.first

相反,这是一个可选的索引路径。

categories?.enumerate()(section, aCategory) 的序列对。对于每个类别,aCategory.videos.enumerate() 是一个(row, aVideo) 对的序列。这个序列被过滤根据搜索词,过滤后的对被映射到索引路径。

所以传递给flatMap()的转换结果是一个数组匹配项的索引路径,每个类别一个数组。flatMap() 将它们连接到一个数组中。

Swift 1.2 中会是

let indexPaths = flatMap(enumerate(categories ?? [])) { (section, aCategory) in
filter(enumerate(aCategory.videos)) { (_, aVideo) in
aVideo == video
}.map { (row, _) in
NSIndexPath(forRow: row, inSection: section)
}
}

关于swift - 使用功能技术来发现 NSIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com