Alamofire下载方法“使用未声明的类型'下载文件目的地'”

时间:2016-06-03 22:54:49

标签: swift alamofire

我正在尝试编写方法来下载带有自定义参数和标题的文件,但是当我编写方法时,XCode会显示未声明类型的使用类型'DownloadFileDestination'

这是我的代码:

public func download(JSON jsonObject:[String:AnyObject], inUrl url:URLStringConvertible,headers:[String:String]?,paramEnconding:ParameterEncoding) {
    let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
    Alamofire.download(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]?, encoding: ParameterEncoding,headers: [String: String]?, destination: DownloadFileDestination) { temporaryURL, response in
        let fileManager = NSFileManager.defaultManager()
        let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
        let pathComponent = response.suggestedFilename

        return directoryURL.URLByAppendingPathComponent(pathComponent!)
    }
}

请注意,我没有放下降价,但XCode仍会抛出错误。

1 个答案:

答案 0 :(得分:0)

您的代码调用download,如下所示:

Alamofire.download(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]?, encoding: ParameterEncoding,headers: [String: String]?, destination: DownloadFileDestination) { ... }

但所有这些参数,MethodURLStringConvertible等,包括DownloadFileDestination都是这些参数的类型。但是你应该传递(例如那些相应类型的对象的实例)。大多数这些参数都是作为您在此处定义的方法的参数提供的,因此您只需使用它们。我只需要猜猜你想要的http方法。

代码示例中另一个奇怪的事情是定义destination,调用为您构建闭包的suggestedDownloadDestination方法。但是你然后实现了自己的闭包。做其中一个,但不是两个。

因此,消除冗余闭包并使用传递给此方法的参数,可以得到类似的结果:

func download(JSON jsonObject: [String: AnyObject], inUrl url: URLStringConvertible, headers: [String: String]?, paramEncoding: ParameterEncoding) {
    let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
    Alamofire.download(.POST, url, parameters: jsonObject, encoding: paramEncoding, headers: headers, destination: destination)
}

我猜你想要.POST。也许你想使用.GET(但是,在这种情况下,传递ParameterEncoding是没有意义的,因为某些编码只在POST请求中有意义。或许你的意思是在你的函数中有一个Method参数。

但是,将所有这些放在一边,希望你现在明白为什么你收到了你所做的编译器错误。