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

时间:2016-08-19 00:54:50

标签: swift ios9 alamofire xcode7.3

我有一个我正在处理的媒体播放器应用,我正在发送Alamofire请求以获取字符串形式的URL ...当我收到回复时,我确实将其作为字符串,但当我尝试将其转换为NSURL时,我一直都是零。

请求是:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"

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

  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!
    }

我在URLToPlay中获得了一个有效的URL查找字符串,实际上如果我将收到的字符串复制/粘贴到浏览器,我就可以播放媒体......但是当我用它转换为NSURL时,我的应用程序崩溃(由于streamingURL为零)。

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

非常感谢你的帮助。

编辑使用完成处理程序:

  let streamingURL = NSURL(string: self.URLToPlay) 

1 个答案:

答案 0 :(得分:1)

这是一个Async流程,无论您使用URLToPlay OUTSIDE .GET Alamofire函数,它都会返回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
}