swift - 如何在 SwiftUI 中分配可选的绑定(bind)参数?

标签 swift binding swiftui

我正在尝试使用一些可选的 Views 构建自定义 NavBar,例如搜索栏(但仅当 View 需要显示它时)。

基本上,我需要通过 @Binding 将一些 @State 属性传递到 View 中。但我还需要它们是可选参数。

这是一个例子:

struct NavBar: View {
    
    var isSearchable: Bool?
    
    @Binding var searchTxt: String
    @Binding var searchIsOn: Bool
    
    var navBarTitle: String
    var navBarAction: (() -> Void)?
    var navBarImage: String?
    
    init(navBarTitle: String, navBarAction: (() -> Void)? = nil, navBarImage: String? = nil, isSearchable: Bool? = false, searchTxt: (Binding<String>)?, searchIsOn : (Binding<Bool>)?) {
        self.navBarTitle = navBarTitle
        if(navBarAction != nil) {
            self.navBarAction = navBarAction!
        }
        if(navBarImage != nil) {
            self.navBarImage = navBarImage!
        }
        self.isSearchable = isSearchable
        
        self._searchTxt = (searchTxt != nil) ? (searchTxt!).binding : nil
        self._searchIsOn = (searchIsOn != nil) ? (searchIsOn!).binding : nil
        
        assert((navBarAction != nil) ? navBarImage != nil : true)
        assert((isSearchable! == true) ? (searchTxt!.value.count > 0) : true)
    }
// var body ....

}

我所说的属性是 searchIsOnsearchTxt。 但是执行赋值 self._searchTxt = searchTxtself._searchIsOn = searchIsOn 会引发编译错误:

Cannot assign value of type 'Binding?' to type 'Binding'

您知道我该如何解决这个问题吗?

或者是否有更好的方法来完成我想做的事情?

最佳答案

@Binding var searchTxt: String?

init(searchTxt: Binding<String?>?) {
    self._searchTxt = searchTxt ?? Binding.constant(nil)
}

更新:我更喜欢这个。 TextField("", text: $text ?? "默认值")

https://stackoverflow.com/a/61002589/4728060

func ??<T>(lhs: Binding<Optional<T>>, rhs: T) -> Binding<T> {
    Binding(
        get: { lhs.wrappedValue ?? rhs },
        set: { lhs.wrappedValue = $0 }
    )
}

关于swift - 如何在 SwiftUI 中分配可选的绑定(bind)参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163055/

相关文章:

ios - 构造多级dispatchQueue会不会有什么不好的事情发生

ios - Swift:使用静态表时,索引路径中的选择行是否返回 nil

ios - NavigationLink 只能使用一次

swiftui - 如何检测 SwiftUI 中的点击位置?

swift - 将一个 SwiftUI View 从另一个下方滑出

Xcode - 查找对 Swift 变量的引用

swift - queryOrdered 并不总是以正确的顺序返回 tableViewCell 上的数据

wpf - 如何公开嵌套在 UserControl 中的控件的 DependencyProperty?

c# - WPF 绑定(bind)语法

c# - WPF:ValueConverter (IValueConverter) 不起作用