SwiftUI - 如何在我的视图中调用函数?
Posted
技术标签:
【中文标题】SwiftUI - 如何在我的视图中调用函数?【英文标题】:SwiftUI - How can I call a Function in my View? 【发布时间】: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? 【参考方案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
【讨论】:
以上是关于SwiftUI - 如何在我的视图中调用函数?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 视图 onAppear 事件调用回扫手势动作