如何在SwiftUI中分配可选的Binding参数? [英] How to assign an optional Binding parameter in SwiftUI?

查看:582
本文介绍了如何在SwiftUI中分配可选的Binding参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

}

我正在谈论的属性是searchIsOnsearchTxt. 但是执行self._searchTxt = searchTxtself._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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆