标签: completionhandler

使用Firebase 3.x的SetValue完成阻止

在Firebase 2.5.1中,这有效:

let post1Ref = sendRequestRef.childByAutoId()
post1Ref.setValue(request, withCompletionBlock: {( error:NSError?, ref:Firebase!) in

})
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何在3.x中实现它(因为完成的文档并没有真正告诉它)

let post1Ref = sendRequestRef.childByAutoId()
post1Ref.setValue(request, withCompletionBlock: {( error:NSError?, ref:Firebase!) in
    if (error != nil) {
       print("ERROR")
    } else {
       print("Success")
    }
})
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

使用未解决的Firebase

使用Firebase 3.x处理完成块的正确方法是什么?

ios firebase completionhandler swift firebase-realtime-database

3
推荐指数
1
解决办法
4378
查看次数

swift中不同类型的闭包语法 - 哪一个是正确的?

我很好奇这些语法语句中哪一个(更)正确.游乐场愉快地编写了两个案例.

方法1

// copied from SO and this appears clear to me
UIView.animate(
    withDuration: 3.0,
    animations: {

    },
    completion: { (Bool) in
        // completion code
    }
)
Run Code Online (Sandbox Code Playgroud)

方法2

UIView.animate(
    withDuration: 3.0,
    animations: {

        // code

    }) {(Bool) in
      // code when finished?
      // argument label completion missing?
    }
Run Code Online (Sandbox Code Playgroud)

为什么第二种方法中的圆括号在最后一个参数之前被关闭?或者是另一种实现UIView.animation

closures ios completionhandler swift swift3

3
推荐指数
1
解决办法
379
查看次数

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

我很困惑围绕swift 3中的完成处理程序的语法.

在下面的函数中,在xml从Web服务调用解析文件后,它应该返回一个变量(an 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: theData)
            myParser.delegate = self
            myParser.parse()
        }
    }
    task.resume()

    if keys.isEmpty {
        return .failure("no historyKeyDictionary")
    }else{
        return .success(keys)
    }

}// End of func …
Run Code Online (Sandbox Code Playgroud)

ios completionhandler swift swift3

3
推荐指数
1
解决办法
1万
查看次数

iOS/Swift - 闭包/完成块和委托/函数之间有什么区别?

我不清楚这两个,现在世界正在转向封闭类型。但我不太清楚这一点。有人可以用一个实时的例子来解释我吗?

delegates closures ios completionhandler swift

3
推荐指数
1
解决办法
3013
查看次数

完成块永远不会被调用?

我们有一个函数,当它完成另一个函数时应该在它的完成块中调用,但是在完成块内的任何东西都不会被调用.这是功能:

func appendAllData (completion: () -> Void) {

    guard let movieDetails = self.movieDetailsData else {
      // handle nil case
      return;
    }

    if let posterImage = self.movieDetailsData?.poster {
      self.posterArray.append(posterImage)
    }

    if let overview = self.movieDetailsData?.overview {
      self.overviewArray.append(overview)
    }

    if let releaseDate = self.movieDetailsData?.releaseData {
      self.releaseInfoArray.append(releaseDate)
    }

    if let runtime = self.movieDetailsData?.runtime {
      self.releaseInfoArray.append(String(describing: runtime))
    }

    if let genre = self.movieDetailsData?.genre {
      if !genre.isEmpty {
        self.releaseInfoArray.append(genre[0].name)
      }
    }

    if let budget = self.movieDetailsData?.budget {
      self.boxOfficeArray.append(budget)
    }

    if let revenue = self.movieDetailsData?.revenue { …
Run Code Online (Sandbox Code Playgroud)

ios completionhandler swift completion-block

2
推荐指数
1
解决办法
814
查看次数

快速闭包内的自我引用有时会返回零

我正在快速访问闭包内的实例方法,在某些情况下引用变为,这会导致我的程序崩溃。我尝试访问 using但在self[weak self]时无法调用实例方法。nil

[weak self] () -> () in
Run Code Online (Sandbox Code Playgroud)

weak-references completionhandler swift

2
推荐指数
1
解决办法
4261
查看次数

Swift:URLSession 完成处理程序

我正在尝试使用在 Xcode Playground 文件中运行的一段代码从本地服务器获取一些数据:

       URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) -> Void in


            if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
                friend_ids = (jsonObj!.value(forKey: "friends") as? NSArray)!
            }

        }).resume()

return friend_ids
Run Code Online (Sandbox Code Playgroud)

在阅读了有关此主题的一些类似问题后,我知道 URLSession 异步运行,因此该函数在从服务器获取任何数据之前返回 nil 值。我还认为我理解完成处理程序可用于确保在继续之前实际获取数据,但不幸的是我并没有真正理解如何实现它。有人可以向我展示如何在这个简单的示例中使用完成处理程序,以确保在返回变量之前从服务器获取 ?

谢谢你!

completionhandler swift urlsession

2
推荐指数
1
解决办法
5514
查看次数

Xcode 中有没有一种简单的方法可以从末尾删除完成块?

每个 Swift 函数的末尾都有一个完成处理程序,如下所示:

func hello(_ name: String, completionHandler: (String) -> Void) {
    completionHandler("Hello \(name).")
}
Run Code Online (Sandbox Code Playgroud)

可以这样调用:

hello("Stack Overflow", completionHandler: { text in
    print(text)
})
// Prints Hello Stack Overflow.
Run Code Online (Sandbox Code Playgroud)

但也更简单:

hello("Stack Overflow") { text in
    print(text)
}
// Prints Hello Stack Overflow.
Run Code Online (Sandbox Code Playgroud)

但是当在 Xcode 中编写代码并开始输入 hello 时,您将获得完整的功能。是否有一个简单的短代码,您可以按它立即从函数中删除completionHandler,还是必须手动执行此操作?

xcode completionhandler swift

2
推荐指数
1
解决办法
629
查看次数

在嵌套闭包中调用完成处理程序以停止递归函数

我的程序从 API 中提取数据,将预约数据返回到小部件中。我设置了一个闭包来处理从 API 中提取未知数量的页面。每次调用 loadResults 时,它都会从第 1 页开始查询 API,然后检查是否还有剩余页面,如果还有剩余页面需要拉取,则再次调用自身。一旦 API 的所有页面都被拉出并加载到我的数组中,它就会停止运行。

我正在 getTimeline 函数中加载 getAllResults 函数,并希望等到它完成运行后再加载我的时间线条目。

有没有办法在 getAllResults 上放置一个可选的完成处理程序,以便我可以使用此函数在完成处理程序完成后加载我的时间线条目?由于我多次调用它,我想让它递归运行直到完成,并能够提醒时间线它已完成并准备加载。

当前代码:

func getAllResults(){
    loadResults { (pageReturned) in
        if pageReturned == Int(totalPages)! {
            pages = 1
            parseData(apptReturn: apptList)
            //end the call
        } else if pageReturned < Int(totalPages)! {
            pages = pages + 1
            getAllResults()
               
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在考虑类似的方法来命名完成处理程序并在嵌套闭包中调用它(但这不起作用)。有没有办法在 loadResults 闭包中引用 getAllResults 完成?

func getAllResults(completedResults completion: @escaping (Bool) -> ()){
    loadResults { (pageReturned) in
        if pageReturned == Int(totalPages)! {
            pages = 1 …
Run Code Online (Sandbox Code Playgroud)

closures completionhandler swift

2
推荐指数
1
解决办法
1399
查看次数

completionHandler - 表达式类型不明确,没有更多上下文

我遵循代码,但收到completionHandler 错误

没有更多上下文,表达类型不明确

据我了解,这是由于completionHandler 不匹配造成的。如何为completionHandler 返回错误的字符串/有意义的详细信息?

func fetch(urlString: String, completionHandler: @escaping (T?, Error?) -> Void) -> Void {
    
    //...

    guard let url = URL(string: urlString) else {
        print("Failed to create URL!")
        DispatchQueue.main.async {
            completionHandler(nil, "Bad URL") // gives error: Type of expression is ambiguous without more context
        }
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

ios completionhandler swift

2
推荐指数
1
解决办法
1万
查看次数