我有一個媒體播放器應用程序,我正在處理,並且我正在發送一個Alamofire請求來獲取URL形式的字符串......當我收到響應時,我確實收到它作爲一個字符串,但是當我嘗試將它轉換成一個NSURL時,我總是得到零。無法在Alamofire response.result.value中使用NSURL! Swift,xcode 7.3
請求爲:
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是一個字符串,我URLToPlay也是一個字符串。 我用將其轉換爲NSURL的命令是
let streamingURL = NSURL(string: self.URLToPlay)
我得到URLToPlay一個有效的URL,看串,其實如果我複製收到的字串對一個瀏覽器/粘貼,我能夠播放媒體...但是當我使用它來轉換爲NSURL時,我的應用程序崩潰(由於streamingURL爲零)。
現在我相信這與請求是異步的有關,但我想知道如果任何人有任何想法如何得到這個工作?
我將不勝感激您的幫助。
編輯使用完成處理程序:
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)
}
}
感謝您抽出時間來回答!我有一個鬼鬼祟祟的懷疑我需要使用「完成處理程序」......我只是在想我必須使用NSNotifications和觀察者......但這似乎是一個好主意......我會在一段時間內測試一下並回復給您 – Agustin
我在原始文章中添加了你的示例,並且在嘗試將字符串轉換爲NSURL後,仍然發現無錯誤... – Agustin
'Url in'後面的'print(theUrl)'並查看它是否顯示nything? – Dershowitz123