Swift:使用 DispatchQueue.global (qos: .userInitiated) .asyncAfter 重复返回的结果
Posted
技术标签:
【中文标题】Swift:使用 DispatchQueue.global (qos: .userInitiated) .asyncAfter 重复返回的结果【英文标题】:Swift: returned result is repeated using DispatchQueue.global (qos: .userInitiated) .asyncAfter 【发布时间】:2020-06-05 07:45:05 【问题描述】:我有以下代码:
(里面:ServerApiManager.sharedInstance.fetchMessages
是调用api的函数)。
返回的结果是:
====didRequestReloadThread ATC Chat Thread
DispatchQueue.global
633
fetchMessages
DispatchQueue.global
633
fetchMessages
ServerApiManager.sharedInstance.fetchMessage
DispatchQueue
DispatchQueue messagesCollectionView
ServerApiManager.sharedInstance.fetchMessage
DispatchQueue
DispatchQueue messagesCollectionView
==> Wrong result because of duplicate.
预期结果是:
====didRequestReloadThread ATC Chat Thread
DispatchQueue.global
633
fetchMessages
ServerApiManager.sharedInstance.fetchMessage
DispatchQueue
DispatchQueue messagesCollectionView
谁能帮忙?
DispatchQueue.global(qos: .userInitiated).asyncAfter(deadline: .now() + 5)
print("DispatchQueue.global")
if(self.messages.count > 0)
let lastMessage = self.messages[self.messages.count-1]
print(633)
ServerApiManager.sharedInstance.fetchMessages(channel: self.channel, minId: lastMessage.id ?? 0, loggedInUser: self.user, onSuccess: (messages) -> () in
self.messages.append(contentsOf: messages)
print("ServerApiManager.sharedInstance.fetchMessage")
MessageStorage.sharedInstance.messageDic[self.channel.id] = self.messages
print("DispatchQueue")
DispatchQueue.main.async
print("DispatchQueue messagesCollectionView" )
self.messagesCollectionView.reloadData()
self.messagesCollectionView.scrollToBottom()
, onFailure: (msg, logged) -> () in
);
【问题讨论】:
【参考方案1】:如日志所示,此代码块调用了两次。因此,您应该检查您调用此代码的位置并找出它被调用两次的原因。您可以使用 break ponits 检查堆栈跟踪以查找此方法第二次调用的位置。
【讨论】:
以上是关于Swift:使用 DispatchQueue.global (qos: .userInitiated) .asyncAfter 重复返回的结果的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?
Swift : 使用多个 swift 文件或仅使用一个 viewController?保持清洁
如何使用 Swift Package Manager `swift build` 命令构建 Swift Package 的优化版本