Класс безопасности резьбы Swift Realm - PullRequest
0 голосов
/ 08 сентября 2018

Я попытался создать realm instance со своим собственным классом потока и хочу использовать его все время в этом потоке, но когда я обращаюсь к нему во второй раз, он обычно падает на Incorrect Thread и редко - без сбоев.

final class RealmThreadSafe: Thread {
    typealias Block = () -> Void
    static let instance = RealmThreadSafe()
    private(set) var realm: Realm!
    private(set) var queue = [Block]()

    init(start: Bool = true, queue: [Block]? = nil) {
        super.init()
        if let queue = queue {
            for block in queue {
                enqueue(block: block)
            }
        }
        if start { self.start() }
        name = "RealmThreadSafe"
    }

    override func main() {
        if realm == nil { realm = try! Realm() }
        while true {
            if isCancelled { return }
            if queue.count > 0 {
                let block = queue.removeFirst()
                block()
            }
        }
    }

    func enqueue(block: @escaping Block) {
        queue.append(block)
    }
}

Есть идеи для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...