调用 swift 中缺少参数 'responder' 的参数

Missing argument for parameter 'responder' in call swift

好的,所以我在这里有点疯狂,试图了解我的代码的问题在哪里。我试图让单独的 classes 进行通信,这样我就可以在文件下载过程中处理 UI 元素。

我选择了一个似乎完全符合我需求的协议解决方案:

协议:

protocol DownloadResponder : class {
    func downloadFinished()
}

下载class: (为了这个问题,我只显示 download_zip func 和 didFinishDownloadingToURL 委托)

import UIKit
import Foundation

typealias CompleteHandlerBlock = () -> ()

class fileDownloader: NSObject, NSURLSessionDelegate, NSURLSessionDownloadDelegate {

    //responder
    var responder : DownloadResponder?

    init(responder : DownloadResponder) {
        self.responder = responder
    }

    var session: NSURLSession!
    var handlerQueue: [String : CompleteHandlerBlock]!

//    class var sharedInstance: fileDownloader {
//        struct Static {
//            static var instance : fileDownloader?
//            static var token : dispatch_once_t = 0
//        }
//        
//        dispatch_once(&Static.token) {
//            Static.instance = fileDownloader()
//            Static.instance!.handlerQueue = [String : CompleteHandlerBlock]()
//        }
//        
//        return Static.instance!
//    }

    func download_zip(sURL: String, destination:String, name:String, fileis:Int) {

        var session:NSURLSessionTask!
        var sessionConfiguration:NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.visi")
        sessionConfiguration.HTTPMaximumConnectionsPerHost = 5

        self.session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
        var url = NSURLRequest(URL: NSURL(string: sURL)!)
        var downloadTask:NSURLSessionDownloadTask = self.session.downloadTaskWithRequest(url)

        downloadTask.resume()
    }

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
        println("session \(session) has finished the download task \(downloadTask) of URL \(location).")

        responder?.downloadFinished()
    }

我的 FileInfo 中的 downloadFinished 函数 ViewController:

func downloadFinished() {
        downloadLbl.text = "Downloaded"
        println("DOWNLOAD OVER")
    }

最后,我的 FileInfo ViewController:

中的函数
func downloadFile(sender:UIButton!)
    {
     // some code...   

     fileDownloader().download_zip(datastring, destination: path, name: naming, fileis: self.fileId)
    }

我的视图控制器中的这个 func 调用 fileDownloader().download_zip(datastring, destination: path, name: naming, fileis: self.fileId) 触发了一个我在添加协议之前没有的错误。它说:Missing argument for parameter 'responder' in call。 我想不出任何解决方案,所以如果有人知道它是什么,请帮助!

fileDownloaderinit 方法中,您需要一个参数 responder: DownloadResponder,而您在 downloadFile 中初始化 fileDownloader 时没有提供该参数]方法。

所以而不是:

fileDownloader().download_zip(...

做:

fileDownloader(DownloadResponderImplementation()).download_zip(...

这假设您还实现了 DownloadResponder 协议,例如:

class DownloadResponderImplementation: DownloadResponder {
   func downloadFinished() {
      //Do something here
   }
}