首页 > 解决方案 > 自定义绑定初始化

问题描述

我想控制传递给 Binding 的值以进行自定义初始化,我正在使用这个向下代码,xcode 向我抛出这个:

在此处输入图像描述

需要帮助解决问题,谢谢帮助。

    import SwiftUI

struct ContentView: View {
    
    @State private var int: Int = Int()
    
    var body: some View {

        BindingView(int: $int)
        
    }
}


struct BindingView: View {
    
    @Binding var int: Int
    
    init(int: Binding<Int>) {
        
        if int == 0 {               // <<:  Here
            
            _int = 100              // <<:  Here
            
        }
        else {
            
            _int = int

        }

    }

    var body: some View {
        
        Text(int.description)

    }
}

标签: swiftui

解决方案


您不能Int像这样直接访问以进行比较,因为它是@Binding。相反,您需要访问它的wrappedValue

仅将输入参数 ( ) 命名为与存储的属性相同时,您还会遇到一些有趣的事情int,但它很容易修复。这是一种变体:

struct BindingView: View {
    
    @Binding var int: Int
    
    init(int: Binding<Int>) {
        
        if int.wrappedValue == 0 {               // <<:  Here
            
            int.wrappedValue = 100              // <<:  Here
            
        }
        
        self._int = int

    }

    var body: some View {
        
        Text(int.description)

    }
}

请注意,这里有一些微妙之处:@Binding允许您直接访问底层值,而Binding<Int>您必须使用该wrappedValue属性。


推荐阅读