【发布时间】:2022-09-30 21:05:13
【问题描述】:
斯威夫特对我来说是新的,我坚持这部分。单击按钮时,我想从 api 请求一些数据。之后,想将我从这个函数获得的数据传递给另一个视图控制器。所以基本上想用这个数据执行segue。但是,当我单击按钮时,请求开始,但它直接执行 segue 到 2. 查看没有任何数据。
我该如何等待:
videoManager.performRequest(with: videoLinkTextField.text!)
这个函数执行segue?
这是我的按钮:
@IBAction func getVideoButtonPressed(_ sender: UIButton) {
if videoLinkTextField.text != nil, videoLinkTextField.text!.contains(\"tiktok\") {
videoManager.performRequest(with: videoLinkTextField.text!)
DispatchQueue.main.async {
self.performSegue(withIdentifier: \"GoToVideo\", sender: self)
}
} else {
videoLinkTextField.text = \"\"
let alert = UIAlertController(title: \"Error\", message: \"Please enter a valid link\", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: \"Ok\", style: .default))
present(alert, animated: true, completion: nil)
}
}
这是我的准备功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == \"GoToVideo\" {
DispatchQueue.main.async {
let destionationVC = segue.destination as! ResultViewController
print(\"Test \\(self.videoUrl)\")
destionationVC.videoUrl = self.videoUrl
}
}
}
这是我的 performRequest 函数:
func performRequest(with videoUrl: String) {
let request = NSMutableURLRequest(url: NSURL(string: \"https://tiktok-downloader-download-videos-without-watermark1.p.rapidapi.com/media-info/?link=\\(videoUrl)\")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = \"GET\"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { data, _, error in
if error != nil {
self.delegate?.didFailedWithError(error!)
}
if let safeData = data {
if let video = self.parseJSON(safeData) {
self.delegate?.didUpdateVideo(self, video: video)
}
}
})
dataTask.resume()
}