EnvironmentObject
- это просто механизм для внедрения экземпляра ссылочного типа, подтверждающего протокол ObservableObject
, в иерархию представлений SwiftUI и обновления такого представления, если соответствующие свойства изменились, просто наблюдая за соответствующими издателями. Но это просто обычный экземпляр ссылочного типа, вы можете передавать его здесь и там таким же образом, как вы передаете любой другой экземпляр ссылочного типа и работать с ним (свойствами, функциями), как с любым другим экземпляром ссылочного типа.
Нет волхвов c.
Обновление: сейчас для кода
Вам не нужно использовать оболочку @EnvironmentObject
в своем делегате для представлений, вместо этого используйте следующее (неуклюжий, поскольку ваш код сокращен)
class Coordinator {
let owner: _Owner_Type_ // << here is owner view of coordinator
let delegate: VideoDelegate
let controller: CameraController!
init(owner: _Owner_Type_){
self.owner = owner
// owner is view which has @EnvironmentObject property,
// so use it here to pass into VideoDelegate
delegate = VideoDelegate(frame: owner.frame)
controller = CameraController(delegate)
}
}
final class VideoDelegate: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate{
private var frame: CIImageFrame // just reference member
// now your delegate has reference to the same instance as environment
// object in view
init(frame: CIImageFrame) {
self.frame = frame
}
...