data?.resetBytes(in: data.startIndex...data.index(after: data.startIndex))
let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let urlRequest = URLRequest(url: videoURL!)
urlSession.dataTask(with: urlRequest) { (data, _, error) in
var data = data
data.resetBytes(in: data.startIndex...data.index(after: data.startIndex))
print("got mp4 file")
let movie = AVMovie(data: data!, options: nil)
let item = AVPlayerItem(asset: movie)
let player = AVPlayer(playerItem: item)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
DispatchQueue.main.async {
playerLayer.frame = self.view.bounds
self.view.layer?.addSublayer(playerLayer)
player.play()
}
}.resume()
class SomeClass {
private _data: [[String: String]]? {
didSet {
/* Тут я получил данные и что-то с ними уже делаю. Этот код выполнится так скоро, как запрос запишет ответ в данную переменную */
}
}
...
private func request(uri: String, params: [String : Any]) {
Alamofire.request(self.url + uri, method: .get, parameters: params as! Parameters).responseJSON { response in
if let json: [AnyObject] = response.result.value as? [AnyObject] {
var items = [[String : String]]()
let data = JSON(json)
for item in data {
items.append(["id": item.1["id"].stringValue, "title": item.1["title"].stringValue])
}
_data = items
}
}
}
...
}
Читайте документацию от и до. Разбирайте библиотеки. Подпишитесь на гуру в medium и twitter. Живите этим и всё придет.