使用自定义init的SwiftUI视图

ben*_*nto 11 swift swiftui

假设我要制作一个如下所示的自定义输入元素:

struct CustomInput : View {
    @Binding var text: String
    var name: String

    var body: some View {
        TextField(name, text: $text)
            .modifier(InputModifier())

    }
}
Run Code Online (Sandbox Code Playgroud)

当前,当我实例化该视图时,需要将textname名称都传递给参数。我希望能够使name参数成为可选参数,例如下面的示例。

 CustomInput("Some name", $text)
Run Code Online (Sandbox Code Playgroud)

通常,我会为此使用init方法。但是我不确定如何像@Bindinginit函数一样处理属性包装器。

关于如何实现此目标的任何想法?

kon*_*iki 18

您可以这样编写初始化程序:

struct CustomInput : View {
    @Binding var text: String
    var name: String

    init(_ name: String, _ text: Binding<String>) {
        self.name = name

        // Beta 3
        // self.$text = text

        // Beta 4
        self._text = text
    }

    var body: some View {
        TextField(name, text: $text)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @matt: $ 访问器现在是不可变的。当用 beta4 以这种方式初始化它时,编译器会给你:***无法分配给属性:'$text'是不可变的***。请注意,美元符号仍然用于传递绑定,下划线仅在初始化时才需要。 (2认同)