无法在 Alamofire response.result.value 中使用 NSURL! Swift, xcode 7.3

Unable to use NSURL in Alamofire response.result.value! Swift, xcode 7.3

我有一个正在开发的媒体播放器应用程序,我正在发送一个 Alamofire 请求以获取字符串形式的 URL...当我收到响应时我做的很好将其作为字符串接收,但当我尝试将其转换为 NSURL 时,我总是得到 nil。

请求是:

  Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
        .validate(statusCode: 200..<300)
        .responseString(encoding: NSUTF8StringEncoding)  { response in
            print("Response: \(response)")
            print("Response String: \(response.result.value!)")
            self.URLToPlay = response.result.value!
    }

我的URLString是String,我的URLToPlay也是String。 我用来将其转换为 NSURL 的命令是

  let streamingURL = NSURL(string: self.URLToPlay) 

我在 URLToPlay 中得到一个看起来像 URL 的有效字符串,实际上,如果我 copy/paste 将字符串接收到浏览器,我就可以播放媒体.. .但是当我使用它转换为 NSURL 时,我的应用程序崩溃了(由于 streamingURL 为 nil)。

现在我相信这与异步请求有关,但我想知道是否有人知道如何让它工作?

非常感谢您的帮助。

编辑为使用完成处理程序:

  func connectToServer() {
    print("Connecting...")

    finishLoad { theUrl in

        let urlString = theUrl.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
        let streamingURL = NSURL(string: urlString!)

  // do what i need to do

    }

    isConnectedToServer = true
    print("Connected...")
}
func finishLoad(complete: (urlToBePlayed: String) -> ()) {
    var aVar: String!
    Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
        .validate(statusCode: 200..<300)
        .responseString(encoding: NSUTF8StringEncoding)  { response in
            aVar = response.result.value!
            complete(urlToBePlayed: aVar)
    }
}

这是一个Async过程,无论你在哪里使用URLToPlay OUTSIDEAlamofire.GET功能,它将变为 return nil 因为它将是 nil 因为进程是异步的并且变量仍然根本没有更新。您可以将其包装在完成处理程序中并像这样使用:

func finishLoad(complete: (urlToBePlayed: String) -> ()) {
let aVar: String!
 Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
        .validate(statusCode: 200..<300)
        .responseString(encoding: NSUTF8StringEncoding)  { response in
            print("Response: \(response)")
            print("Response String: \(response.result.value!)")
            aVar = response.result.value!             
            complete(urlToBePlayed: aVar)
    }
}

现在像这样调用和使用它:

finishLoad { theUrl in
let urlString = theUrl.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQ‌​ueryAllowedCharacter‌​Set())  //Fixes the deprecated error.
var convertToURL = NSURL(string: urlString)!     
 print(convertToURL)

//here you do what you want
}