Tag: 完成处理程序

NSURLSession完成处理程序非常慢

当我运行以下代码时,我几乎可以立即打印一个响应,但是,在我的视图中可能需要十秒或更长时间。 似乎最类似的问题是由会话和处理程序在不同的线程上引起的。 但为什么最终会奏效呢? 很困惑… func downloadDetails(completed: DownloadComplete) { let url = NSURL(string: _detailsURL)! let session = NSURLSession.sharedSession() let task = session.dataTaskWithURL(url) { (data, response, error) -> Void in do { let dict = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [String:AnyObject] if let eyeColor = dict["eyeColor"] as? String { self._eyeColor = eyeColor } } catch { print("json […]

Firebase Swift 3完成处理程序Bool

我试图编写一个函数的完成处理程序,检查用户是否是firebase中的一个团队的成员。 我有一个公共类customFunctions ,其中我创build了一个函数ifUserIsMember 。 我似乎有点卡在完成处理程序的想法,似乎无法弄清楚如何检查完成时的布尔值(如果这是有道理的)。 这是我的代码: import Foundation import GeoFire import FirebaseDatabase public class customFunctions { func ifUserIsMember(userid: String, completionHandler: @escaping (Bool) -> ()) { let ref = FIRDatabase.database().reference() ref.child("teammembers").observeSingleEvent(of: .value, with: { (snapshot) in if snapshot.hasChild(userid){ completionHandler(true) }else{ print("user is not a member of a team") completionHandler(false) } }) } } 这就是我所说的: @IBAction func […]

完成处理程序swift 3从函数返回一个variables

在swift 3中,我很困惑周围的完成处理程序的语法。 在下面的函数中,从Web服务调用中parsingxml文件后,它应该返回一个variables(一个array [String:String] )。 我的尝试是在下面,但显然这是不正确的。 enum HistoryKey { case success([String:String]) case failure(String) } private func getHistoryKeys(searchterm: String, completion: @escaping () -> HistoryKey) { let url = PubmedAPI.createEsearchURL(searchString: searchterm) let request = URLRequest.init(url: url as URL) let task = session.dataTask(with: request) { (data, response, error) in if let theData = data{ let myParser = XMLParser.init(data: […]

通过在iOS中连接表格从Firebase获取数据

我正在尝试从两个不同的Firebase表中获取数据。 这里是表的结构: Post { 1{ pImages{ i1:true i2:true } } 2{ pImages{ i3:true } } } Images{ i1{ iUrl : …. pId : 1 } i2{ iUrl :… pId : 1 } i3{ iUrl:…. pId : 2 } } 我需要检索与ID = 1的职位对应的图像。以下是我的实现检索图像: func retrieveImagesForPost(postId: String,completion: (result: AnyObject?, error: NSError?)->()){ var imgArray:[Image]=[] let postsRef = self.ref.child("post") […]

完成处理程序在iOS上如何工作?

我试图了解完成处理程序和块。 我相信你可以使用块进行许多深层次的编程,而不需要完成处理程序,但是我想我明白,完成处理程序是基于块的。 (所以基本上完​​成处理程序需要块,而不是相反方向)。 所以我在互联网上看到了关于旧的twitter框架的代码: [twitterFeed performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { if (!error) { self.successLabel.text = @"Tweeted Successfully"; [self playTweetSound]; } else { // Show alert } // Stop indicator sharedApplication.networkActivityIndicatorVisible = NO; }]; 这里我们调用了一个方法,它执行TWRequest,并在返回responseData&urlResponse&error时返回。 只有当它返回时,才会执行被testing的块并停止活动指示器。 完善! 现在,这是一个设置,我有一个不同的应用程序的工作,但我试图把碎片放在一起: @interface Define an ivar typedef void (^Handler)(NSArray *users); Declare the method +(void)fetchUsersWithCompletionHandler:(Handler)handler; @implementation +(void)fetchUsersWithCompletionHandler:(Handler)handler { //…Code […]

Swift:在返回函数之前等待Firebase加载

我从firebase有一个简单的函数加载date。 func loadFromFireBase() -> Array<Song>? { var songArray:Array<Song> = [] ref.observe(.value, with: { snapshot in //Load songArray }) if songArray.isEmpty { return nil } return songArray } 目前这个函数总是返回零,即使有数据要加载。 它是这样做的,因为它不会在函数返回之前加载数组的地方执行完成块。 我正在寻找一种方法来使函数只返回一旦完成块已被调用,但我不能把回报完成块。