我有一个我正在处理的媒体播放器应用,我正在发送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)
答案 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.URLQueryAllowedCharacterSet()) //Fixes the deprecated error.
var convertToURL = NSURL(string: urlString)!
print(convertToURL)
//here you do what you want
}