Swift 3:无法使用类型错误的参数列表调用dataTask

时间:2016-10-12 21:07:16

标签: ios swift xcode swift3 xcode8

我是iOS的初学者。我搜索过网页,找不到可以解决问题的答案。 坚持并且不知道该怎么做以及如何搜索解决方案。

我正在按照基于Swift 2的教程进行操作。以下方法显示错误。

func downloadBooks(bookTitle: String) {
    let stringURL = "GET https://www.googleapis.com/books/v1/volumes?q=\(bookTitle)"

    guard let URL = URL(string: stringURL) else {
        print("url problems")
        return
    }

    let urlRequest = NSMutableURLRequest(url: URL)
    let session = URLSession.shared

    let task = session.dataTask(with: urlRequest) { (data: Data?, response: URLResponse?, error: Error?) in

    }

    task.resume()
}

我做了Xcode建议的所有调整,但没有进一步的提示。

此外,教程中的原始代码部分是这样的:

guard let URL = NSURL(string: stringURL) else {
    print("url problems")
    return
}

然后Xcode建议添加as URL,如下所示:

let urlRequest = NSMutableURLRequest(url: URL as URL)

这两个版本都显示无错误。那么区别是什么呢?我应该使用哪一个?

我真的很感激任何帮助!

1 个答案:

答案 0 :(得分:13)

在Swift 3中,编译器需要本机URLRequest

let urlRequest = URLRequest(url: url) // use a lowercase variable name, URL is a native struct in Swift 3

但是根据您的特定语法,您甚至不需要请求

let task = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) in ...

也不是注释

let task = session.dataTask(with: url) { (data, response, error) in ...