SwiftUI绑定可选项

时间:2020-10-08 09:59:48

标签: ios swift swiftui optional-binding

因此,如here所述,在SwiftUI中处理可选绑定时可以使用一些选项。起初,对我来说似乎还可以,但是如果我滚动例如TextField(不可见TextField)并向后滚动,则将删除TextFIeld中的值。与DatePickers相同。如果您在窗体中有选择器,并且当您从可选绑定项中返回值时,将您“重定向”到选择屏幕,也会发生同样的情况。自iOS 14.0发布以来,我已经注意到了这一点。因此,如果有人可以确认这是一个错误或我做错了什么?

以下是我的代码中的一些摘要:

@ObservedObject var item:Item //在视图中声明的属性,Item是CoreData对象,其中所有属性都是可选的

对于我使用的解决方案:

extension Optional where Wrapped == String
{
    var _bound: String?
    {
        get
        {
            return self
        }
        set
        {
            self = newValue
        }
    }

    public var bound: String
    {
        get
        {
            return _bound ?? ""
        }
        set
        {
            _bound = newValue.isEmpty ? nil : newValue
        }
    }
}

TextField的声明如下:

Form
{
    Section
    {
         TextField("Enter item name - required", text: $item.name.bound)
         // next is a Picker where you get redirected to selection screen as it is inside form
        // more elements below that makes form too big so it is scrollable
    }
 }

表单也包装在ZStack和Navigation视图中,但是我要粘贴的代码太多了。

重现步骤:使用具有@Published属性的对象进行视图,将其设置为视图中的属性。让该对象具有可选属性,例如字符串,日期,... 以相同的形式使Picker具有一些选项。 运行core并在TextFIeld中键入内容,然后点按选择器(您将重定向到选择视图),然后为选择器选择新值。您将被重定向回,并且TextField在所有其他可选的绑定视图(DatePicker,...)中为空。

0 个答案:

没有答案