SwiftUI необязательный объект среды - PullRequest
4 голосов
/ 20 января 2020

Я использую @EnvironmentObject, например:

struct MyView: View {
  @EnvironmentObject var object: MyObject

  ...
}

, но мой код не должен содержать значение для object.

. не работает (даже не компилируется - Property type 'MyObject?' does not match that of the 'wrappedValue' property of its wrapper type 'EnvironmentObject')

Вы также не можете передать объект по умолчанию (это также решило бы мою проблему) - либо как начальное значение свойства, либо как параметр до @EnvironmentObject. они не работают:

@EnvironmentObject var object: MyObject = MyObject()

@EnvironmentObject(MyObject()) var object: MyObject

Я пытался обернуть @EnvironmentObject в свою собственную оболочку свойств, но это просто не работает вообще.

I ' мы также пытались обернуть доступ к свойству объекта, но он не выдает исключение, которое может быть перехвачено, он выдает fatalError.

Есть ли что-то, что я пропускаю, или я просто пытаюсь невозможно

1 Ответ

4 голосов
/ 20 января 2020

Это не очень элегантно и может легко сломаться, если что-то в EnvironmentObject изменится (и другие предупреждения), но если вы напечатаете EnvironmentObject в SwiftUI 1 / Xcode 11.3.1, вы получите:

EnvironmentObject<X>(_store: nil, _seed: 1)

так как насчет:

extension EnvironmentObject {
    var hasValue: Bool {
        !String(describing: self).contains("_store: nil")
    }
}
...