如何使用 SwiftUI 将参数传递给 Button 的操作
Posted
技术标签:
【中文标题】如何使用 SwiftUI 将参数传递给 Button 的操作【英文标题】:How to pass a parameter to the action of Button with SwiftUI 【发布时间】:2020-01-03 03:26:26 【问题描述】:我想更改我的应用程序中的语言,为此我想使用按钮。 因此,对于每种语言,我都会有一个 Button,它将传递一个带有该语言的语言代码的参数。
现在我知道可以将函数传递给按钮,但是如何传递带有参数的函数?
【问题讨论】:
【参考方案1】:要将参数传递给动作,我认为有多种方法可以这样做。但我发现这是最优雅的方式。
首先,我创建了一个接受参数“语言”的函数。然后该函数将返回一个使用“语言”参数的匿名函数:
func changeLanguage(language: String) -> () -> ()
return
print(language)
在视图中,我可以创建按钮来保存由“changeLanguage”返回的匿名函数,其中的“语言”参数可能因每个按钮而异。
var body: some View
List
Section(header: Text(NSLocalizedString("Language", comment: "settings.view.select.language")))
Button(NSLocalizedString("English", comment: "settings.view.language.english"), action: self.changeLanguage(language: "en"))
Button(NSLocalizedString("Dutch", comment: "settings.view.language.dutch"), action: self.changeLanguage(language: "nl"))
.listStyle(GroupedListStyle())
【讨论】:
这是一个很好的答案,它对我有用。但是有人可以解释它为什么以及如何工作吗?我不明白......【参考方案2】:您可以使用闭包调用带有参数的方法,如下所示:
import SwiftUI
struct LanguageView: View
var body: some View
Button(action: selectLanguage(language: "en") )
Text("English")
func selectLanguage(language: String)
print("Language selected: \(language)")
【讨论】:
以上是关于如何使用 SwiftUI 将参数传递给 Button 的操作的主要内容,如果未能解决你的问题,请参考以下文章
使用 ForEach 中的 SwiftUI 3.0 .swipeActions,您如何在将 ForEach 的输入参数传递给该视图时让一个动作转到另一个视图?