如何解决迅速派遣总队
我有重复的代码。我想更新主线程上的内容,UI内容。
public func closeGraph() {
DispatchQueue.main.sync{_closeGraph()}
}
这很容易,但是如果用户交互触发了它,而我已经在主线程上了,该怎么办。 ++不好。
public func closeGraph() {
if Thread.isMainThread {
_closeGraph()
} else {
DispatchQueue.main.sync{_closeGraph()}
}
}
糟糕,openGraph()抛出...
public func openGraph() throws {
do {
if Thread.isMainThread {
try _openGraph()
} else {
try DispatchQueue.main.sync{try _openGraph()}
}
} catch {
throw error
}
}
有没有更好的方法,所以我不必复制粘贴到任何地方?
解决方法
您可以将支票提取为通用函数,如下所示:
public func mainQueue(execute block: () throws -> Void) rethrows {
if Thread.isMainThread {
try block()
} else {
try DispatchQueue.main.sync{ try block() }
}
}
然后,如果您的_closeGraph()
函数没有引发任何错误,则您的代码将如下所示:
public func closeGraph() {
mainQueue(execute: _closeGraph)
}
,如果您的_closeGraph()
函数throws
,您的代码将如下所示:
public func closeGraph() {
do {
try mainQueue(execute: _closeGraph)
} catch {
print(error)
}
}
如您所见,您每次都需要编写throwing函数的处理。
更新:如果您打算处理一般错误,则可以在do-catch
函数中隐藏mainQueue(execute:)
语句,如下所示:
public func mainQueue(execute block: () throws -> Void) {
do {
if Thread.isMainThread {
try block()
} else {
try DispatchQueue.main.sync{ try block() }
}
} catch {
print(error)
}
}
然后调用此函数将与_closeGraph()
函数是否抛出相同:
public func closeGraph() {
mainQueue(execute: _closeGraph)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。