Swift - 基于另一个变量返回不同值的函数
Posted
技术标签:
【中文标题】Swift - 基于另一个变量返回不同值的函数【英文标题】:Swift - function to return different value based on another variable 【发布时间】:2021-05-11 21:09:26 【问题描述】:我有一个视图 (view1) 来显示不同的数据,我希望该视图根据另一个变量进行更改。
struct View1: View
let array = myFunc()
var body: some View
VStack
Text("\(settings.score)")
List
ForEach(0..<array.count) section in
NavigationLink(destination: RowDetailView(array: array[section]))
RowView(array: array[section])
在另一个视图中我建立了一个 Observable 对象:
class GameSettings: ObservableObject
@Published var score = 1
在其他视图中,这一切都很好。我可以根据需要更新它。
我有一个函数来获取数组变量,我希望它根据“score”的当前值返回一个不同的数组。
func myFunc() -> [arrayModel]
@StateObject var settings = GameSettings()
if settings.score == 1
var array = [ arrayModel(example: example) ]
return array
else if settings.score == 2
var array = [ arrayModel(example: example) ]
return array
这似乎不起作用。我已经尝试了各种调整版本,但找不到如何正确实现它。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:如果问题是settings.score
不是myFunc
中的当前,并且如果myFunc
在 SwiftUI 视图中,您可以执行以下操作:
-
将
@StateObject var settings = GameSettings()
更改为@EnvironmentObject var settings: GameSettings
,并将其移到外部 myFunc
。
在您的SceneDelegate
中,存储对GameSettings()
的引用,如下所示:static var gameSettings = GameSettings()
。
在您的SceneDelegate
的scene(_:willConnectTo:options:)
函数中,使用.environmentObject
修饰符将ObservedObject
提供给您的视图,并传入您在步骤#2 中存储的变量,如下所示:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
let contentView = ContentView()
if let windowScene = scene as? UIWindowScene
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(SceneDelegate.gameSettings))
self.window = window
window.makeKeyAndVisible()
【讨论】:
您好,感谢您回答我的问题。我是 Swifui 的新手,所以我不知道 SceneDelegte 是什么,所以我发现很难实现它。正如我所说,访问或修改settings.score没有问题,我只想根据settings.score的不同值返回不同的数组值以上是关于Swift - 基于另一个变量返回不同值的函数的主要内容,如果未能解决你的问题,请参考以下文章