swift @Bindning Package 器在与init()一起使用时出错

vcudknz3  于 2023-03-22  发布在  Swift
关注(0)|答案(1)|浏览(130)

我正在为macOS创建一个特殊的Textfield。我想创建我自己的初始化器,用于特殊命名。但是当我用@Binding创建初始化器时,它给出了两个错误。
我不知道为什么它给出了这个初始化错误。它显然是在那里初始化的。下面是我的代码:

struct MacOSTextField: View{
    @Binding var text: String
    var displayText: String
    var body: some View{
        RoundedRectangle(cornerRadius: 0.4)
            .overlay {
                TextField(displayText, text: $text)
            }
    }
    init(text: String, displayText: String) {
        self.displayText = displayText
        self.text = text << Error: 'self' used before all stored properties are initialized
    } << Error: Return from initializer without initializing all stored properties
}

当我删除self.text = text或改变它的位置时,它不起作用。下面是删除self.text = text时的代码:

struct MacOSTextField: View{
    @Binding var text: String
    var displayText: String
    var body: some View{
        RoundedRectangle(cornerRadius: 0.4)
            .overlay {
                TextField(displayText, text: $text)
            }
    }
    init(text: String, displayText: String) {
        self.displayText = displayText
        self.text = text
    } << Error: Return from initializer without initializing all stored properties

任何帮助都将不胜感激。

cbeh67ev

cbeh67ev1#

由于text是一个@Binding,因此需要将其传递给init

init(
    text: Binding<String>, // <-- passing it to the init
    displayText: String
) {
        self.displayText = displayText
        self._text = text // <-- assigning value to it. Notice the "_"
    }

这当然假设持有这个观点的观点将具有如下内容:

struct ParentView: View {
    
    @State var text: String = ""
    
    var body: some View {
        MacOSTextField(
            text: $text, // <-- passing a binded variable. Notice the "$" 
            displayText: "Something"
        )

还要注意的是,您所称的displayText实际上是一个占位符文本。

相关问题