Как транслировать удаленный звук в iOS 13? (SwiftUI)

Этот код, использующий AVPlayer, работает только на Playground.

import AVFoundation

    var player = AVPlayer()
let playerItem = AVPlayerItem(url: URL(string: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")!)
      player = AVPlayer(playerItem: playerItem)
      player.play()

Когда я попытался запустить его в своем приложении SwiftUI на своем физическом устройстве, используя этот код:

 Button(action:{

              var player = AVPlayer()
            let playerItem = AVPlayerItem(url: URL(string: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")!)
                  player = AVPlayer(playerItem: playerItem)
                  player.play()

            print("Works")

               },label:{

                   Image("play")
          })

Он выводит на консоль Работает. Однако звук на устройстве не воспроизводится.

Буду признателен за любую помощь, пока не могу найти здесь ничего.

Большое спасибо!


person Sean Saoirse    schedule 10.11.2019    source источник


Ответы (1)


В SwiftUI представления - это типы значений. Это всего лишь данные, которые описывают то, что отображается на экране. Они могут быть созданы, уничтожены или скопированы в любое время. AVPlayer - это ссылка на конкретный объект плеера. Здесь вы предполагаете, что он будет продолжать существовать, и что будет только один из них. Это не то, что предоставляет SwiftUI View.

Вам нужно переместить AVPlayer за пределы представления (в объекты модели) и просто привязать к нему действия пользовательского интерфейса.

person Rob Napier    schedule 11.11.2019