Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-新字符串到达时取消线程_Ios_Swift_Multithreading_Grand Central Dispatch_Dispatch Async - Fatal编程技术网

Ios Swift-新字符串到达时取消线程

Ios Swift-新字符串到达时取消线程,ios,swift,multithreading,grand-central-dispatch,dispatch-async,Ios,Swift,Multithreading,Grand Central Dispatch,Dispatch Async,下面的代码允许我在UITextView上创建一个打字效果,但我想知道如何在打印新字符串时取消正在运行的线程 如果我有两条线 var a = "aaaaaa" var b = "bbbbbb" 字符串a的一半是“aaa”,它停止,然后继续“bbbbbb”,因为此时我的代码给了我类似“aaabababbb”的东西 一种方法是使用操作队列而不是GCD。它支持取消,您的代码可以测试是否已发出取消。请查看支持取消的。请注意,cancel()调用不会停止正在执行的操作。它只是更新操作对象的状态,这样代码就

下面的代码允许我在UITextView上创建一个打字效果,但我想知道如何在打印新字符串时取消正在运行的线程

如果我有两条线

var a = "aaaaaa"
var b = "bbbbbb"
字符串a的一半是“aaa”,它停止,然后继续“bbbbbb”,因为此时我的代码给了我类似“aaabababbb”的东西


一种方法是使用操作队列而不是GCD。它支持取消,您的代码可以测试是否已发出取消。请查看支持取消的。请注意,
cancel()
调用不会停止正在执行的操作。它只是更新操作对象的状态,这样代码就可以决定如何处理它,因为iOS 8调度块支持某种取消<代码>DispatchWorkItem.cancel()
extension UITextView {
    public func typewrite(text: String, timebetweenletters: TimeInterval, fontsize: Float) {
        self.font = UIFont(name: "HelveticaNeue-Light", size: CGFloat(fontsize))
        DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
            Helper.write(text)
            var writing = Helper.read()
            for (_,caracter) in text.characters.enumerated() {
                DispatchQueue.main.async {
                    self.text = self.text! + String(caracter)
                }
                Thread.sleep(forTimeInterval: timebetweenletters)
            }
        }
    }
}