@当变量为true时,SwiftUI组件内的绑定Bool变量不会触发

@当变量为true时,SwiftUI组件内的绑定Bool变量不会触发,swiftui,Swiftui,所以我有这样的代码 struct MyComponent: View { @Binding var isShowing: Bool var body: some View { Text("sample") .offset("") .offset(y: isShowing ? -100: 0) //values just for example .animation

所以我有这样的代码

struct MyComponent: View {
   @Binding var isShowing: Bool
   
   var body: some View {
       Text("sample")
          .offset("")
          .offset(y: isShowing ? -100: 0) //values just for example
          .animation(.easeInOut, value: isShowing)
   }
}
@Binding var isShowing: Bool {
   didSet {
      didShow()
   }
 }
我想在isShowing为真时添加一个didShow回调。我遇到的问题是这个代码

struct MyComponent: View {
   @Binding var isShowing: Bool
   
   var body: some View {
       Text("sample")
          .offset("")
          .offset(y: isShowing ? -100: 0) //values just for example
          .animation(.easeInOut, value: isShowing)
   }
}
@Binding var isShowing: Bool {
   didSet {
      didShow()
   }
 }
只有当isShowing为false时才会激发


我在这里呆了好几天。

对我有用的是,我创建了一个空视图,该视图执行在其onAppear和onDisappear上插入的回调

struct CallbackView: View {
  let onAppear: (()->())?
  let onDisappear: (()->())?

  init(onAppear: (()->())? = nil, onDisappear: (()->())? = nil) {
      self.onAppear = onAppear
      self.onDisappear = onDisappear
  }

  var body: some View {
      VStack {
         Spacer()
      }
      .frame(width: 0, height: 0)
      .onAppear {
        self.onAppear?()
      }
      .onDisappear {
        self.onDisappear?()
      }
  }
然后我将其添加到MyComponent的主体中,如:

if isShowing {
    CallbackView(onAppear: {
                   //.. do something
                 },
                 onDisappear: {
                   //.. do something
                 })
}
如果您只是将其转换为视图中的内部视图变量,则也可以使用该方法,而不是生成结构


这可能不是最好的办法。但这是唯一对我有效的方法,我很高兴我摆脱了我的问题。

属性包装器不调用
didSet
应该是你的解决方案。这回答了你的问题吗@陈海腾:是的,很管用!唯一的问题是它只适用于ios 14及以上版本。但是是的,谢谢!