调用 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
。
我想不出任何解决方案,所以如果有人知道它是什么,请帮助!
在 fileDownloader
的 init
方法中,您需要一个参数 responder: DownloadResponder
,而您在 downloadFile
中初始化 fileDownloader
时没有提供该参数]方法。
所以而不是:
fileDownloader().download_zip(...
做:
fileDownloader(DownloadResponderImplementation()).download_zip(...
这假设您还实现了 DownloadResponder 协议,例如:
class DownloadResponderImplementation: DownloadResponder {
func downloadFinished() {
//Do something here
}
}
好的,所以我在这里有点疯狂,试图了解我的代码的问题在哪里。我试图让单独的 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
。
我想不出任何解决方案,所以如果有人知道它是什么,请帮助!
在 fileDownloader
的 init
方法中,您需要一个参数 responder: DownloadResponder
,而您在 downloadFile
中初始化 fileDownloader
时没有提供该参数]方法。
所以而不是:
fileDownloader().download_zip(...
做:
fileDownloader(DownloadResponderImplementation()).download_zip(...
这假设您还实现了 DownloadResponder 协议,例如:
class DownloadResponderImplementation: DownloadResponder {
func downloadFinished() {
//Do something here
}
}