Я выполняю функцию в UIScrollView.scrollViewDidScroll
. Я ожидаю, что func выполнит один и после. flag
должно быть либо 0, либо -1.Как только flag
станет -2 всегда.Похоже, что функция работает одновременно.Я хочу, чтобы Thread.main отправлял оболочку функции addItemsAndReload()
в UIScrollView.scrollViewDidScroll
. Я не могу понять.Мой код:
import UIKit
class ViewController: UIViewController {
@IBOutlet var tableView: UITableView!
var items: [Int] = []
var flag: Int = 0 {
didSet {
// Thread.main is serial
// flag should be 0 or -1
assert(flag == 0 || flag == -1, "FLAG: \(flag) What Value???")
}
}
let range = (0..<2)
func addItemsAndReload() {
flag -= 1
items.append(contentsOf: range.map({ $0 }))
tableView.reloadData()
flag += 1
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "\(items[indexPath.row])"
return cell
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// OK!!!!
addItemsAndReload()
}
}