swiftui将变量传递到另一个视图

Posted

技术标签:

【中文标题】swiftui将变量传递到另一个视图【英文标题】:swiftui passing variable into antoher view 【发布时间】:2020-02-02 16:43:27 【问题描述】:

嘿,您可以在下面找到我的源代码。 我想做的是:

提取 Json 后,我希望它可以在其他视图中访问... 请帮帮我...

我的意思是提取的值:“\n (users.Name)”

所以我只想将响应数据放到另一个视图中...

struct User: Codable 
let Name: String


let url = URL(string: "http://192.168.178.26/iso/loginserv.php")
                guard let requestUrl = url else  fatalError() 

                var request = URLRequest(url: requestUrl)
                request.httpMethod = "POST"

                let postString = "user=\(self.user)&pass=\(self.pass)";

                request.httpBody = postString.data(using: String.Encoding.utf8);

                let task = URLSession.shared.dataTask(with: request) 
                    (data, response, error) in

                    if let error = error 
                        print("Error took place \(error)")
                        return
                    

                    guard let data = data else return

                    do
                        let users = try JSONDecoder().decode(User.self, from: data)
                        print("Response data Name: \n \(users.Name)")


                        if !(data.isEmpty) 
                            self.signedIn = true
                        

                    catch let jsonErr
                        print(jsonErr)
                    

                


                task.resume()

All i want is to get the marked thing into another view...

【问题讨论】:

一个重要的问题是:您希望这个新视图如何工作?您是希望视图进行导航推送,例如点击详细信息指示器,还是希望在现有视图上叠加自定义视图? 【参考方案1】:

你可以做的是使用单例设计模式。

基本上,您创建一个仅实例化一次的类,具有全局静态属性。该属性将用于将信息从一个视图传递到另一个视图。

所以,首先创建一个 Singleton 类(作为一个简单的 Swift 文件)并定义一个静态实例,如下所示:

class Singleton 

      static let instance = Singleton()

      private init() 

      

现在,创建并初始化要在视图之间共享的变量,例如字符串name

class Singleton 

      static let instance = Singleton()

      private init() 

      

      var name = ""


现在,在您的代码中,将 users.Name 归因于它:

                do
                    let users = try JSONDecoder().decode(User.self, from: data)
                    print("Response data Name: \n \(users.Name)")

                    Singleton.instance.name = users.Name

                    if !(data.isEmpty) 
                        self.signedIn = true
                    

                catch let jsonErr
                    print(jsonErr)
                

现在,要在另一个视图中访问此信息,只需使用 Singleton.instance.name

【讨论】:

这很长很复杂【参考方案2】:

使用这样的结构

struct structFittings 
    static var collectedWorks: Bool = false
    static var collected: String = "notcollected"
    static var failclicked: Bool = false

这样访问

structFittings.collectedWorks 

应用中的任何位置

【讨论】:

以上是关于swiftui将变量传递到另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中将数据从视图传递到另一个视图?

SwiftUI-将@State变量传递给多个视图麻烦

如何将一个 SwiftUI 视图作为变量传递给另一个视图结构

如何在swiftui中的视图之间传递数据?

如何将数据从子视图传递到父视图到 SwiftUI 中的另一个子视图?

如何在swiftui中的视图之间传递变量?