【问题标题】:How to use closure in SwiftUI?如何在 SwiftUI 中使用闭包?
【发布时间】:2022-08-18 17:46:20
【问题描述】:

我想自定义一个视图并添加一个带闭包的函数。

像这样:

public func onTapGesture(count: Int = 1, perform action: @escaping () -> Void) -> some View

当我声明一个函数时,它显示为错误Cannot assign to property: \'self\' is immutable,如下所示:

    var onFinishedClosure: (() -> Void)?

    func onFinished(perform action: @escaping () -> Void) -> some View {
        self.onFinishedClosure = action
        return self
    }

谢谢你的帮助。

    标签: swiftui


    【解决方案1】:

    假设它是一个修饰符,你需要一个副本,比如

    func onFinished(perform action: @escaping () -> Void) -> some View {
        var modifiedView = self                  // << here !!
        modifiedView.onFinishedClosure = action
        return modifiedView
    }
    

    【讨论】:

    • 错误消失了。它运作良好,谢谢。
    【解决方案2】:

    你会得到错误,因为在初始化一个结构后,它的变量不能自己改变。

    要更改这一点,您可以使用mutating

    mutating func onFinished(perform action: @escaping () -> Void) -> some View {
      self.onFinishedClosure = action
      return self
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2021-04-10
      • 2019-11-06
      • 1970-01-01
      相关资源
      最近更新 更多