SwiftUI 中绑定的无关参数

Posted

技术标签:

【中文标题】SwiftUI 中绑定的无关参数【英文标题】:Extraneous Argument with Binding in SwiftUI 【发布时间】:2021-04-02 04:35:09 【问题描述】:

我在操场上使用 SwiftUI 进行绑定,这是一个非常简单的代码

struct Car:View 
    var kar = "????"
    @Binding var startAnimation: Bool = false
    var body: some View 
        HStack 
            Spacer()
            Text(kar)
                .font(.custom("Arial", size: 100))
                .offset(x: self.startAnimation ? 0 - UIScreen.main.bounds.width + 100: 0)
        
    

但是 Playground 给出了一个错误,上面写着“Extraneous Argument Label”,我确实认为没有问题,尤其是当我使用 Xcode 编码时。那么有没有办法破解它或者我错过了什么??

【问题讨论】:

【参考方案1】:

你不能或者你不应该给 Binding 直接值,它绑定数据,你应该像在代码中一样使用 State



与状态:

import SwiftUI

struct CarView: View 
    
    @State private var startAnimation: Bool = Bool()
    
    var body: some View 
        
        VStack 
            
            Text("?")
                .font(Font.system(size: 100))
                .offset(x: startAnimation ? 50.0 - UIScreen.main.bounds.width/2 : UIScreen.main.bounds.width/2 - 50.0)
            
            Button("Drive!")  startAnimation.toggle() 
                .font(Font.headline)
                .padding()
            
        
        .animation(.easeIn(duration: 3.0), value: startAnimation)
        
    


带绑定:

import SwiftUI

struct ContentView: View 
    
    @State private var startAnimation: Bool = Bool()
    
    var body: some View 
        
        VStack 
            
            CarView(startAnimation: $startAnimation)
            
            Button("Drive!") 
                
                startAnimation.toggle()
            
            .font(Font.headline)
            .padding()
            
        
        .animation(.easeIn(duration: 3.0), value: startAnimation)
        
    


struct CarView: View 

    @Binding var startAnimation: Bool
    
    var body: some View 
        
        Text("?")
            .font(Font.system(size: 100))
            .offset(x: startAnimation ? 50.0 - UIScreen.main.bounds.width/2 : UIScreen.main.bounds.width/2 - 50.0)

    

【讨论】:

我确实使用了状态,就像在源代码中一样

以上是关于SwiftUI 中绑定的无关参数的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 我们如何重新绑定绑定的可选参数?

可选字符串数组作为绑定参数 SwiftUI [重复]

参数 SwiftUI 中的可选绑定

SwiftUI视图onReceive方法接收“冗余”事件的解决

SwiftUI视图onReceive方法接收“冗余”事件的解决

如何解开可选的@State以用于调用需要在swiftui中绑定的东西[重复]