作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法为 Optional 值创建一个扩展,这样我们就不需要单独创建自定义绑定(bind)。
class ViewModel: ObservableObject {
@Published var text: String?
}
struct ContentView: View {
@ObservedObject var model: ViewModel
var body: some View {
let binding = Binding(
get: { self.model.text ?? "" },
set: { self.model.text = $0 }
)
return VStack {
TextField("Text", text: binding)
}
}
}
我正在考虑做这样的事情
extension Optional where Wrapped == String {
func optionalBinding() -> Binding<String> {
return Binding(get: {
self ?? ""
}, set: { newValue in
self = newValue
})
}
}
对此有什么建议吗?
最佳答案
您可以尝试扩展 Binding
而不是 Optional
:
extension Binding where Value == String? {
var optionalBinding: Binding<String> {
.init(
get: {
self.wrappedValue ?? ""
}, set: {
self.wrappedValue = $0
}
)
}
}
然后像这样使用它:
class ViewModel: ObservableObject {
@Published var text: String?
}
struct ContentView: View {
@ObservedObject var model = ViewModel()
var body: some View {
VStack {
TextField("Text", text: $model.text.optionalBinding)
Text(String(describing: model.text))
}
}
}
关于swift - SwiftUI 中带有自定义绑定(bind)的可选扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63341176/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!