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

时间:2020-02-02 16:43:27

标签: swift user-interface variables

嘿,下面有我的源代码。 我想做的是:

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

我的意思是提取的值:“ \ n(用户名)”

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

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...

2 个答案:

答案 0 :(得分:1)

您可以使用Singleton设计模式。

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

因此,首先创建一个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

答案 1 :(得分:0)

使用这样的结构

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

这样访问

structFittings.collectedWorks 

应用程序中的任何地方