Swift 3 如何正确编写完成处理程序块
Posted
技术标签:
【中文标题】Swift 3 如何正确编写完成处理程序块【英文标题】:Swift 3 How to correctly write Completion Handler Block 【发布时间】:2016-12-20 19:29:40 【问题描述】:我是 Xcode 和编程语言的新手,我需要您的帮助。我正在开发消息应用程序,但无法使用完成处理程序块。这是我的代码:
@IBAction func SendButton(_ sender: AnyObject)
if self.textfield.text != ""
let mess = CKRecord(recordType: "Message")
mess["content"] = textfield.text as CKRecordValue?
let publicdata = CKContainer.default().publicCloudDatabase
publicdata.save(mess, completionHandler: (record, error) -> Void in
if error == nil
let indexpath = NSIndexPath(item: self.chat.count, section: 0)
CATransaction.begin()
CATransaction.setDisableActions(true)
self.CollView.performBatchUpdates (
self.chat.insert(mess, at: self.chat.count)
self.CollView.insertItems(at: [indexpath as IndexPath])
, completion: (true) -> Void in
print("Animation completed")
self.CollView.contentOffset = CGPoint(x: 0, y: 40)
)
CATransaction.commit()
print("SAVED")
else
print("error")
)
textfield.text = ""
我使用CATransaaction 来执行BatchUpdates,但是performBatchUpdates 方法中的Completion Handler Block 无法完成。如您所见,这不是正确的编写方式,我知道,但是我已经尝试了我所知道的一切来实现它,但它不会。完成:
completion: (true) -> Void in
print("Animation completed")
self.CollView.contentOffset = CGPoint(x: 0, y: 40)
)
请帮助我。谢谢!!
【问题讨论】:
你好,你能发布你的publicdata.save函数吗 【参考方案1】:你可以试试这个
collectionView?.performBatchUpdates(
print("First part")
, completion: (result: Bool) in
print("Second part")
)
【讨论】:
【参考方案2】: func loadData()
chat = [CKRecord]()
let publicData = CKContainer.default().publicCloudDatabase
let query = CKQuery(recordType: "Message", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
publicData.perform(query, inZoneWith: nil, completionHandler: (results, error) -> Void in
if let text = results
self.chat = text
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async () -> Void in
self.CollView.reloadData()
else
print("error")
)
【讨论】:
以上是关于Swift 3 如何正确编写完成处理程序块的主要内容,如果未能解决你的问题,请参考以下文章