如何在SwiftUI中分配可选的Binding参数? [英] How to assign an optional Binding parameter in SwiftUI?
问题描述
我正在尝试使用一些可选的Views
构建自定义的NavBar
,例如搜索栏(但仅在视图需要显示它的情况下).
I'm trying to build a custom NavBar
with some optional Views
, like a searchbar (but only if the view needs to display it).
基本上,我需要通过@Binding
传递一些@State
属性.但我也需要将它们作为Optional
参数.
I need to pass some @State
properties with @Binding
down the views, basically. But I also need them to be Optional
parameters.
这是一个例子:
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 ....
}
我正在谈论的属性是searchIsOn
和searchTxt
.
但是执行self._searchTxt = searchTxt
或self._searchIsOn = searchIsOn
赋值会引发编译错误:
The properties I'm talking about are searchIsOn
and searchTxt
.
But doing the assignment self._searchTxt = searchTxt
or self._searchIsOn = searchIsOn
throws a compile error:
无法分配类型为绑定"的值?键入绑定"
Cannot assign value of type 'Binding?' to type 'Binding'
您知道如何解决此问题吗?
Do you know how could I resolve this issue?
还是有更好的方法来做我想做的事情?
Or is there a better way to do what I'm trying to do?
推荐答案
@Binding var searchTxt: String?
init(searchTxt: Binding<String?>?) {
self._searchTxt = searchTxt ?? Binding.constant(nil)
}
这篇关于如何在SwiftUI中分配可选的Binding参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!