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()。 在您的SceneDelegatescene(_: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 - 基于另一个变量返回不同值的函数的主要内容,如果未能解决你的问题,请参考以下文章

Swift 学习笔记 (函数)

C语言返回多个值的方法

返回不同类型的变量

如何使用 Swift 从一个函数返回不同类型的结构?

热门模拟具有不同类型返回值的函数?

swift swift函数返回两种不同的数据类型