use*_*030 -2 sql asynchronous swift
我找到了一个用于连接Microsoft SQL Server数据库的开源Objective-C库.
问题是,我想同步使用它.
这就是我的Swift项目使用库的方式.
func execute(query: String) {
self.client.connect(host + ":" + port, username: username, password: password, database: database) { (connected) -> Void in
if connected {
self.client.execute(query, completion: { (results: Array<AnyObject>!) -> Void in
self.result = results[0] as! Array<AnyObject>
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
传递的块由库异步执行.有没有办法让代码同步执行,这样每当我调用时execute,该线程在execute返回之前等待库工作完成?
nhg*_*rif 11
所以,我对你正在使用的github库有一些经验.
由于该库存在一些问题,您可能希望同步进行此调用(您不能同时进行多个查询,并且无法打开与服务器的多个连接,因为该库会执行所有操作SQL通过单例工作).为了解决其中的一些问题,我强烈建议您查看我写的SQLConnect库(花了一些时间尝试使用您正在使用的Martin库).我的库远离单例方法,您可以根据需要在尽可能多的不同线程上建立多个连接.
有了这个......你可以让这个库(以及我的同时)同步执行.
如果您在SQLClient.h文件中注意到,该SQLClient对象指定a workerQueue和a callbackQueue.Martin已将其设置callbackQueue为首先实例化单例的任何队列,并且workerQueue是他指定的队列.但是,这些都是可以完美设置的公共财产.
如果您确实希望查询同步执行,只需设置workerQueue和callbackQueue操作当前队列即可.
SQLClient.sharedInstance.workerQueue = NSOperationQueue.currentQueue()
SQLClient.sharedInstance.callbackQueue = NSOperationQueue.currentQueue()
Run Code Online (Sandbox Code Playgroud)
然后执行您的查询.
所有代码都将在同一个代码上执行NSOperationQueue,因此将同步执行.
当然,你可以用做同样的事情,我的SQLConnect库,为的SQLConnection对象同样指定workerQueue和callbackQueue,您可以指定任何你想要的队列.
随着所有的此说,我非常,非常,强烈建议您让操作保持同步,并想出什么问题让你觉得它应该是同步进行一些其他的解决办法.即使你仍然认为它应该是同步的,请确保它不会阻止UI线程.