Почему iOS Thread.main не похож на последовательную очередь? - PullRequest
0 голосов
/ 24 января 2019

Я выполняю функцию в 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()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...