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