【发布时间】:2022-09-27 17:18:09
【问题描述】:
let _ = Binding(get: { x }, set: { x = $0 })
当你有更复杂的 getter 和 setter 时,似乎很长。我想知道是否有更简单的方法。我确实知道@focusState,但让我们暂时忘记它。
让我们尝试一些东西..
public protocol FocusEnum: Equatable {
//func binding(_ equals: Self) -> Binding<Bool>
}
extension Optional where Wrapped: FocusEnum {
func binding(_ equals: Self) -> Binding<Bool> {
Binding(get: { self == equals }, set: { self = $0 ? equals: nil })
}
}
这行不通,self 是不可变的。如果我将其更改为 mutable func- no go,那么闭包将捕获 inout 参数...
这将非常方便..
enum focusEnum: FocusEnum {
case field1
case field2
}
...
@State var focused: focusEnum? = nil
并获得绑定.. let _ = focused.binding(.field1)
有任何想法吗?
-
错误说明了一切,它是不可变的。根据定义,绑定是双向连接。你在连接什么?
-
到符合 FocusEnum 协议的可选枚举。