ios - 闭包内的 Swift NSURLSession 访问委托(delegate)

标签 ios swift delegates nsurlsession

我是 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/

相关文章:

iphone - 当存在委托(delegate)时,respondsToSelector 的行为如何?

iphone - - (无效)alertView取消 :(UIAlertView *)alertView is not called

javascript - 无法将文本从 WKWebview 复制到剪贴板

ios - Firebase 获取数据

ios - 为什么 UINavigationBar 变黑了?

swift - 获取堆上对象的大小(以字节为单位)

objective-c - 在类方法中使用委托(delegate),objective-c

ios - 如何在 IOS Swift 中进行 Firebase 分页

ios - Xcode Storyboard 上的并排约束

swift - 强制 NSStackView 拥抱内容