Что вы ожидаете от содержимого необязательного Bool
, хранящегося в A.a
, если кто-то установит производное необязательное связывание Bool в B.b
в nil
? Ваш способ обернуть Bool
в .constant
работает, потому что он предотвращает эту возможность (поскольку постоянная привязка не может быть изменена).
В качестве альтернативы вы можете создать производную привязку, которая просто игнорирует установку значений nil
, например, так (обратите внимание на недокументированный префикс "_" для назначения значения оболочки основного свойства):
extension B {
init(reqA: Binding<Bool>) {
self._a = Binding<Bool?>(get: { reqA.wrappedValue },
set: { if let newValue = $0 { reqA.wrappedValue = newValue } })
}
}