【问题标题】:SwiftUI - How can I call a Function in my View?SwiftUI - 如何在我的视图中调用函数?
【发布时间】:2020-08-03 15:34:56
【问题描述】:

我已经使用 SwiftUI/Swift 一个星期了,我喜欢它。现在我有一个问题。我想从我的视图中调用一个函数,但我得到了这个错误

类型'()'不能符合'View';只有结构/枚举/类类型可以符合协议

这是代码:

struct testView: View {
    
    
    var body: some View {
        VStack {
            Text("TextBox")
            Text("SecondTextBox")
            self.testFunction()
        }
    }
    
    func testFunction() {
        print("This is a Text.")
    }
    
}

我不明白。在其他语言中,它要简单得多,并且可以这样工作。有人可以帮我吗? Swift 对我来说很新:D

【问题讨论】:

  • 目前尚不清楚您将在什么时候使用该功能做什么,因为在正文的上下文中,大多数情况下只期望视图。那你能详细说明一下吗?
  • 我只是在玩 SwiftUI。我试图在视图中执行一个 for,但我做不到。有没有办法在视图中执行函数或 for's?

标签: ios swift swiftui


【解决方案1】:

同时这里是(不是全部)可以调用函数的位置/方式

    init() {
        self.testFunction()     // non always good, but can
    }

    var body: some View {
        self.testFunction()            // 1)
        return VStack {
            Text("TextBox")
               .onTapGesture {
                  self.testFunction()    // 2)
               }
            Text("SecondTextBox")
        }
        .onAppear {
            self.testFunction()     // 3)
        }
        .onDisappear {
            self.testFunction()     // 4)
        }
    }

...等等

【讨论】:

  • 啊好吧,我现在明白了一点。但是为什么在VStack之前有一个“返回”呢?
  • 因为body 是具有不透明返回类型的计算属性,所以在这种情况下需要明确指示返回的内容以确定类型。
【解决方案2】:

使用 Swift 5.3 和 Xcode 12.4

我使用一个小扩展来调试视图(示例中为 VStack),例如检查geometryReader.size。它可用于调用视图中的任何函数,如下所示:

注意:仅用于调试目的。我不建议在任何生产代码中包含这样的代码

VStack {
    Text.console("Hello, World")
    Text("TEXT"
}

extension Text {
    static func console<T>(_ value: T) -> EmptyView {
        print("\(value)")
        return EmptyView()
    }
}

这将在控制台打印“Hello, World”.....

【讨论】:

    【解决方案3】:

    在编写 swift UI(iOS 应用程序)时,有一个原因是需要遵循 View 协议。从结构内部调用函数不符合协议。

    您可以做的最好的事情是 .on(insertTimeORAction here)。

    Read more about it here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 2020-03-28
      • 2021-03-24
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多