我有一个iOS应用,可用来触发动作。该操作会产生大量文本,我希望在更新时向用户显示。我当前的方法在更长的(5k行)输出上阻塞。除了在几百行后被截断之外,我该怎么办?
当前,我要做的是将流程流输出到文件中。然后,我在该文件上使用FileHandle
,并创建一个readabilityHandler
,它将代码段传递到我的UIViewController
:
stdout_handler = FileHandle(forReadingAtPath: "my.txt")
stdout_handler?.readabilityHandler = { handle in
let data = handle.readData(ofLength: 100)
if let snippet = String(data: data, encoding: .utf8) {
self.delegate?.append_script(text: snippet)
}
}
我有我的委托人UIViewController
,请将此字符串附加到UITextView.text
func append_script(text: String) {
DispatchQueue.main.async {
if self.script_output.text == nil {
self.script_output.text = text
} else {
self.script_output.text.append(text)
}
let last_line = NSRange(location: self.script_output.text.count - 1, length: 1)
self.script_output.scrollRangeToVisible(last_line)
}
}
在简单的情况下,就足够了;但肯定有更好的方法。