gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:32:18 29 4
gpt4 key购买 nike

我正在尝试使用一些可选的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com