-1

添加DispatchQueue.global(qos: .background).async {}到我的代码(Xcode 10、Swift 5)的单个函数后,滚动条如下所示:

在此处输入图像描述

这些是对需要“自我”的 var 和其他函数的 40 多个调用。

解决这个问题并不难(编辑器 > 修复所有问题),但它会大大降低可读性。

我知道可以创建这些变量的新副本/引用并使用它们而不是外部的,但是会有很多新的副本/引用。

是否有第三种方法可以解决此问题,有助于提高可读性但不会更改初始代码(太多)?

4

1 回答 1

1

您可以创建一个嵌套函数或其他方法来放置您要执行的代码,然后将该嵌套函数或方法传递给DispatchQueue.main.async.

这是一个带有嵌套函数的示例:

原始代码:

class Foo {
    var a = 0
    var b = 0
    var c = 0

    func f() {
        a = 1
        b = 1
        c = 1
    }
}

异步执行:

class Foo {
    var a = 0
    var b = 0
    var c = 0

    func f() {
        func doAsync() {
            a = 1
            b = 1
            c = 1
        }
        DispatchQueue.global(qos: .background).async(execute: doAsync)
    }
}

如您所见,您不需要添加任何selfs。

于 2019-07-23T13:55:58.090 回答