我是 swift 的新手,所以请多多包涵。我正在使用 NSURLSession,我需要在响应完成时访问我定义的委托(delegate)。
这是我的类(class)属性(property)
var delegate: APIClientDelegate?
这是相关的部分
var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())
var task = session.dataTaskWithRequest(request){
(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if error == nil {
var result = NSString(data: data, encoding: NSASCIIStringEncoding)!
NSLog("request to %@ result %@", request.URLString, result)
if let delegate = self.delegate{
delegate.requestDidSucceed(data)
} else {
println("nope")
}
}
}
task.resume()
一切正常,但我无法访问我的委托(delegate)委托(delegate)。我在这里错过了一些简单的东西吗?我已经用谷歌搜索了一段时间,但问题是我不知道我不知道什么:/
感谢您的帮助。
编辑说明: 问题是在这种情况下 delegate 是 nil。这是因为我不明白遵守协议(protocol)的类必须将委托(delegate)设置为自己。这是指向预期协议(protocol)实现的链接,这是我不明白的地方。
所以在实现协议(protocol)的类中:
var apiClient: APIClient = APIClient()
apiClient.delegate = self
最佳答案
您的委托(delegate)未定义。
您声明一个委托(delegate) var
类型 Optional<APIClientDelegate>
但你永远不会设定它的值(value)。如果你想让它工作,你委托(delegate) var 需要指向一个类,该类满足 APIClientDelegate
协议(protocol)中设置的要求。 .
关于ios - 闭包内的 Swift NSURLSession 访问委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042619/