【问题标题】:Frustrated Swift Callback沮丧的 Swift 回调
【发布时间】:2015-08-07 03:36:34
【问题描述】:

最近我在做一个需要大量API异步与服务器交互的项目,我尝试过委托,但是写很多委托器不是很优雅。我之前一直在关注 SO 上的所有“Swift Callback”线程,但仍然卡住。

//First try

func post(url: String, data: String, callback:(result: String) ->Void){
    callback(result: "Completed")
}

func request(url: String, data: String){
    post(url, data, { (result) in
        println(result)
    })
}

request("Hello", "World")

//prints nothing


//second try following threads

func test(txt: String, resolve: (name: String) -> Void) {
    resolve(name: "Dodo")
}
test("hello", {(name: String) in
    println(name)
})

我错过了什么,任何帮助将不胜感激

【问题讨论】:

    标签: swift asynchronous callback


    【解决方案1】:

    您的代码看起来不错。我运行 Xcode 7 并需要进行一些修改,但代码对我有用。如果您在 Playground 中尝试此操作,请确保它实际上正在执行。我经常发生我期望打印语句显示某些内容,但是 Playground 卡住并且由于错误而没有输出任何内容。

    这是对我有用的代码(针对 Swift 2 进行了修改):

    func post(url: String, data: String, callback:(result: String) ->Void){
        callback(result: "Completed")
    }
    
    func request(url: String, data: String){
        post(url, data: data, callback: { (result) in
            print(result)
        })
    }
    
    request("Hello", data: "World")
    
    func test(txt: String, resolve: (name: String) -> Void) {
        resolve(name: "Dodo")
    }
    test("hello", resolve: {(name: String) in
        print(name)
    })
    

    【讨论】:

    • 正是我在 Playground 上运行它!所以我将它植入我的项目中,现在一切看起来都很好。非常感谢!!
    【解决方案2】:

    如果您想在 Playground 中运行您的代码,您需要告诉 Xcode 不要退出(以便它可以在后台发出请求并执行异步回调)。

    将它附加到你的游乐场应该可以让它工作:

    import XCPlayground
    
    XCPSetExecutionShouldContinueIndefinitely()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2012-12-17
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多