在Swift 3中,URL始终为nil。

9

我有一个结构体用于调用iTunes API,但是每次运行它时,myURL 变量都没有被赋值,它总是 nil。不确定我做错了什么:

let myDefaultSession = URLSession(configuration: .default)
var myURL: URL?
var myDataTask: URLSessionTask?

struct APIManager {

    func getJSON(strURL: String)  {
        myURL = URL(string: strURL)
        var dictReturn: Dictionary<String, Any> = [:]

        //cancel data task if it is running
        myDataTask?.cancel()
        print(myURL!) //<----Always nil
    }
}

这里是字符串:

"https://itunes.apple.com/search?media=music&entity=song&term=The Chain"

1
发布你传递给getJSON的字符串。 - Rashwan L
1个回答

26

您得到nil是因为URL包含空格。您需要先对字符串进行编码,然后再将其转换为URL。

func getJSON(strURL: String)  {
    if let encoded = strURL.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed),
        let myURL = URL(string: encoded) {
       print(myURL)
    }

    var dictReturn:Dictionary<String, Any> = [:]

    //cancel data task if it is running
    myDataTask?.cancel()
}

URL将是:

https://itunes.apple.com/search?media=music&entity=song&term=The%20Chain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接