【问题标题】:Wait Until Function Completes and Segue等到函数完成并继续
【发布时间】: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()
}

    标签: swift segue


    【解决方案1】:

    将segue放在这里

    if let video = self.parseJSON(safeData) {
       self.delegate?.didUpdateVideo(self, video: video)
       DispatchQueue.main.async {
         self.performSegue(withIdentifier: "GoToVideo", sender: self)
       }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多