我有一个 View Controller 和一个类,用于执行调用服务并从服务器获取数据的操作。 ViewController 代码如下,
class ViewController : UIViewController
{
override func viewDidLoad() {
let parser = Parser()
parser.connectServer("abc URL" , ..... <gotDataFromServer> ..... )
}
func gotDataFromServer(response:String)
{
...... Do our things here .......
}
}
解析器代码如下,
class Parser
{
func connectServer(apiURL:String,...<call back function name>...)
{
let manager = RequestOperationManager.sharedManager()
manager.GET(apiURL ,
parameters: nil,
success: { (operation,responseObject) ->Void in
.....<Call back the function which is passed in parameter> ....
},
failure: { (operation , error) in
print ("error occurred")
})
}
}
现在,在上面的示例代码中,我想传递回调函数“gotDataFromServer”作为参数,当内部函数从服务器获取响应时,我想回调该函数。 任何人都可以帮忙吗?
最佳答案
您可以使用委托(delegate)来实现这一点。试试下面的代码
class ViewController : UIViewController, DataDelegate
{
override func viewDidLoad() {
let parser = Parser()
parser.delegate = self
parser.connectServer("abc URL" , ..... <gotDataFromServer> ..... )
}
func gotDataFromServer(response:String)
{
...... Do our things here .......
}
}
并在解析器中添加如下协议(protocol)
protocol DataDelegate {
func gotDataFromServer(response:String)
}
class Parser
{
var delegate : DataDelegate!
func connectServer(apiURL:String,...<call back function name>...)
{
let manager = RequestOperationManager.sharedManager()
manager.GET(apiURL ,
parameters: nil,
success: { (operation,responseObject) ->Void in
delegate.gotDataFromServer("") //parameter is your data
},
failure: { (operation , error) in
print ("error occurred")
})
}
}
关于ios - 快速从调用者到被调用者的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35318744/