在后台线程中使用 "self." 的更好方法?

Better way of using "self." in background thread?

在我的代码(Xcode10,Swift5)的单个函数中添加DispatchQueue.global(qos: .background).async {}后,滚动条看起来像这样:

这些是对需要 "self.".

的 vars 和其他函数的 40 多个调用

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

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

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

您可以创建嵌套函数或其他方法来放入要执行的代码,然后将该嵌套函数或方法传递给 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)
    }
}

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