Swift 闭包内的 NSURLSession 访问委托
Swift NSURLSession access delegate within closure
我是 swift 的新手,请多多包涵。我正在使用 NSURLSession,我需要在响应完成时访问我定义的委托。
这是我的class属性
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 为零。这是因为我不明白遵守协议的 class 必须将委托设置为自己。这是对预期协议实现进行 link 的地方,这是我不明白的地方。
所以在实现协议的class中:
var apiClient: APIClient = APIClient()
apiClient.delegate = self
您的委托未定义。
您声明了一个类型为 Optional<APIClientDelegate>
的委托 var
,但您从未设置它的值。如果你想让它工作,你委托 var 需要指向一个 class 来满足 APIClientDelegate
.
协议中设置的要求。
我是 swift 的新手,请多多包涵。我正在使用 NSURLSession,我需要在响应完成时访问我定义的委托。
这是我的class属性
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 为零。这是因为我不明白遵守协议的 class 必须将委托设置为自己。这是对预期协议实现进行 link 的地方,这是我不明白的地方。
所以在实现协议的class中:
var apiClient: APIClient = APIClient()
apiClient.delegate = self
您的委托未定义。
您声明了一个类型为 Optional<APIClientDelegate>
的委托 var
,但您从未设置它的值。如果你想让它工作,你委托 var 需要指向一个 class 来满足 APIClientDelegate
.