在我最小化应用程序并再次将其打开之前,swiftui视图不会更新

时间:2020-09-30 15:59:19

标签: swift swiftui

这是一个非常简单的视图:

import SwiftUI

struct ContentView: View
{
    @ObservedObject var doctestModel = DoctestModel()
    
    var body: some View
    {
        ScrollView
        {
            Text(doctestModel.output)
        }
    }
}

这是我的doctestModel:

import Foundation
import SwiftUI
import Combine

class DoctestModel : ObservableObject
{
    @Published var output : String
    var queue : DispatchQueue
    

    init()
    {
        output = ""
        let fd = rdi_hos_init()
        queue = DispatchQueue(label: "doctest_thread", qos: .utility)
        
        queue.async
        {
            // Some c code that will write to fd
            rdi_hos_run_tests()
        }
        
        queue.async
        {
            let buf_len = 4096
            let buf = UnsafeMutableRawPointer.allocate(byteCount: buf_len, alignment: 1)
            var bytes_read = 0
            
            while true
            {
                bytes_read = Darwin.read(fd, buf, buf_len)
                
                assert(bytes_read != -1)
                
                if bytes_read == 0
                {
                    break
                }
                                
                DispatchQueue.main.sync {
                    self.output += String(bytesNoCopy: buf, length: bytes_read,
                    encoding: .utf8, freeWhenDone: false)!
                }
            }
            
            buf.deallocate()
            rdi_hos_run_close()
        }
    }
}

该代码从某些C代码正在写入的管道中读取。我正在异步进行读取,但是随后在主线程中更新了@Published变量。

问题是直到我最小化应用程序之前,屏幕将一直是空白的,然后当我再次打开它时,视图将开始更新。

调试时,我发现我正确地接收了数据,并且输出变量正在完美地更新,但是由于某些原因,只有在最小化并再次打开后,视图才会更新。

0 个答案:

没有答案