斯威夫特。如何动态地划分结果为几个部分
我是新来的iOS开发和我目前的应用程序,我需要做到以下几点:斯威夫特。如何动态地划分结果为几个部分
- 得到结果来自Flickr搜索(完成)
- 结果写入阵列由10个项目(不能弄清楚如何)
- 10项
所以填充在收集查看结果,这是我有:
@IBOutlet weak var start_btn: UIButton!
fileprivate var searches = [FlickrSearchResults]()
fileprivate let flickr = Flickr()
override func viewDidLoad() {
super.viewDidLoad()
flickr.searchFlickrForTerm("cat") {
results, error in
if let results = results {
print("Found \(results.searchResults.count) matching \(results.searchTerm)")
self.searches.insert(results, at: 0)
因此,而不是最后一行我想将结果(有500条记录)分成10个批次,以便以后我可以按批次从搜索数组中获取它们。
你能告诉我这是一个好主意吗?如何实现它?
我不认为这是个好主意。要稍后拆分阵列,可以使用两个变量 - startIndex
和endIndex
。例如,如果你想从0只显示记录 - 9项指标,写类似:
startIndex = 0
endIndex = 9
let resultsBatch = results[startIndex...endIndex]
谢谢你的想法!你能帮我弄清楚如何在循环中用resultBatches填充数组搜索? –
可以中创建具有数组列表里的数组做到这一点。请在以下示例代码:
@IBOutlet weak var start_btn: UIButton!
// Make a array list which can store arrays of FlickrSearchResults
fileprivate var searches = [[FlickrSearchResults]]()
fileprivate let flickr = Flickr()
override func viewDidLoad() {
super.viewDidLoad()
flickr.searchFlickrForTerm("cat") {
results, error in
// Prepare some section/counter/insideArray varaibles to split your values
var section = 0
var counter = 0
var insideArray = [FlickrSearchResults]()
if let result = results {
if counter < 9 {
// Fill the inside array list, if we reach 10 values, they will be stored in your searches array list
insideArray.append(result)
if result == results.last {
// If you identify the end of your values
searches.insert(insideArray, at: section)
continue
}
counter = counter + 1
} else {
// Store the first 10 values in your array list section [0], then the next 10 values in section[1], etc.
insideArray.append(ar)
searches.insert(insideArray, at: section)
counter = 0
section = section + 1
insideArray = []
}
}
}
}
嗨,谢谢。事情是,结果是不是一个数组,它不允许数组方法 –
不,它不是...但你可以iterare结果,并将其放置到一个数组... – AlexWoe89
下面是一个简单迅捷4扩展Array
到块阵列。
extension Array {
func chunked(by size: Int) -> [[Element]] {
return stride(from: 0, to: count, by: size).map { index in
Array(self[index..<Swift.min(index + size, count)])
}
}
}
在你的代码,你将要存储所有结果,那么只能说明你感兴趣的页面
@IBOutlet weak var start_btn: UIButton!
fileprivate var chunkedResults = [[FlickrPhoto]]()
fileprivate var searches = [FlickrPhoto]()
fileprivate let flickr = Flickr()
override func viewDidLoad() {
super.viewDidLoad()
flickr.searchFlickrForTerm("cat") { results, error in
if let results = results {
print("Found \(results.searchResults.count) matching \(results.searchTerm)")
self.chunkedResults = results.searchResults.chunked(size: 10)
self.searches = self.chunkedResults.first ?? []
我真的很喜欢这种方法,问题是,结果'不是一个数组,不能被chanked。我可以查找搜索吗? –
@ToursdayFourAM它看起来像你需要挖掘结果来获得'FlickrPhoto'数组。 –
也许这将是有益的。
let resultsCount = 505
let batchSize = 10
var startIndex = 0
var endIndex = 0
let batchesCount = Int(results.count/batchSize)
let batchRest = results.count % batchSize
var batches: [[Int]] = []
for batch in 0..<batchesCount {
startIndex = batch * batchSize
endIndex = startIndex + batchSize
batches.append(Array(results[startIndex...endIndex]))
}
let lastBatch = Array(results[endIndex..<endIndex + batchRest])
batches.append(lastBatch)
print(batches)
是你只是试图做分页? - 一次显示10个结果页面? – Wez
是的,确切地说。有没有更简单的方法来实现这一点? –
以下任何解决方案都应该可以工作,您只需修改它们即可使用您的搜索数组。 – Wez