使用“自我”的更好方式。在后台线程中?
Posted
技术标签:
【中文标题】使用“自我”的更好方式。在后台线程中?【英文标题】:Better way of using "self." in background thread? 【发布时间】:2019-07-23 12:42:55 【问题描述】:将DispatchQueue.global(qos: .background).async
添加到我的代码(Xcode 10、Swift 5)的单个函数后,滚动条如下所示:
这些是对需要“自我”的 var 和其他函数的 40 多个调用。
解决这个问题并不难(编辑器 > 修复所有问题),但它会大大降低可读性。
我知道可以创建这些 var 的新副本/引用并使用它们而不是外部的,但是会有很多新的副本/引用。
是否有第三种解决此问题的方法有助于提高可读性但不会更改初始代码(太多)?
【问题讨论】:
请发布一些您尝试过的代码。 你应该总是说self
。这看起来更好,而不是更糟。错误是一开始就忽略了它。随时随地输入self
。
@SagarChauhan 抱歉,不知道代码在这里有什么帮助。每个人都知道self.
的样子,我并不是直接尝试用我的代码解决问题,而是更多地寻找替代方案。
@matt You should always say self
- 即使您不在后台线程中?我从未见过有人这样做,而且我真的不需要self
(除非您使用第二个线程),因为它不会添加任何内容并且也会降低可读性。
将闭包中的代码提取到方法/嵌套函数中,并改为传递方法/嵌套函数的名称?
【参考方案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)
如您所见,您不需要添加任何self
s。
【讨论】:
这就是我一直在寻找的解决方案 - 干净且简单。谢谢,我会用我的代码试试看! 抱歉,明天才能测试。 抱歉耽搁了!刚刚测试了它,它正在工作,谢谢!以上是关于使用“自我”的更好方式。在后台线程中?的主要内容,如果未能解决你的问题,请参考以下文章