调用 URLSession 后我不能做其他工作

I can not do other work after calling URLSession

我只想在音频开始播放时隐藏imageview

URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
            do {
                self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
                self.myMediaPlayer1.prepareToPlay()
                self.myMediaPlayer1.delegate = self
                self.SetSessionPlayerOn()
                self.loading_img.isHidden = true    // not work til audio finish playing 
                print("imageview should be hidden now")
                self.myMediaPlayer1.play()
            }catch let error {
                print("error!!!!!!!!!!")
            }
        }.resume()

我可以一次打印,但图像视图只有在媒体播放器播放完毕后才会隐藏!

更新 现在可以了。谢谢Tushar

DispatchQueue.main.async { [unowned self] in
                    self.loading_img.isHidden = true
                }

首先,您应该只在主线程上更新 UI。所以你必须在 dataTask 中添加下面的代码。之后,您应该更新视图的布局以更新 UI。所以代码应该是这样的:

URLSession.shared.dataTask(with: serverUrl!) { [self] (data, res, error) in
        do {
            self.myMediaPlayer1 = try AVAudioPlayer(data: data!)
            self.myMediaPlayer1.prepareToPlay()
            self.myMediaPlayer1.delegate = self
            self.SetSessionPlayerOn()
            DispatchQueue.main.async {
                self.loading_img.isHidden = true
                self.view.layoutIfNeeded()
                print("imageview should be hidden now")
            }
            self.myMediaPlayer1.play()
        }catch let error {
            print("error!!!!!!!!!!")
        }
    }.resume()