Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从结构访问特定值_Ios_Swift - Fatal编程技术网

Ios 如何从结构访问特定值

Ios 如何从结构访问特定值,ios,swift,Ios,Swift,我创建了一个struct UserModel.swift来存储json数据:- struct UserModel { var id: Int = 0 var uuid:Int = 0 var user_name: String = "" var password: String = "" var name: String = "" var email: String = "" init(json: [String:Any]) {

我创建了一个struct UserModel.swift来存储json数据:-

struct UserModel {

    var id: Int = 0
    var uuid:Int = 0
    var user_name: String = ""
    var password: String = ""
    var name: String = ""
    var email: String = ""

    init(json: [String:Any]) {

        if let obj = json["id"] as? Int {
            self.id = obj
        }

        if let obj = json["uuid"] as? Int {
            self.uuid = obj
        }

        if let obj = json["user_name"] as? String {
            self.user_name = obj
        }

        if let obj = json["name"] as? String {
            self.name = obj
        }

        if let obj = json["email"] as? String {
            self.email = obj
        }
    }
}
现在我使用Alamofire在我的ViewController.Swift文件中获取json,并通过创建一个变量来存储我的结构。我成功地获取json并将其存储在我的结构中

var userModel = [UserModel]()
private func getList() {

    progressHUD.show(in: view, animated: true)

    //          let uuid = UserDefaults.standard.integer(forKey: "uuid")

    Alamofire.request(Constants.API.url("list_request?device_token=\(device_token ?? "")&uuid=794849"), method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {
        (response:DataResponse<Any>) in
        self.progressHUD.dismiss()

        guard let json = response.result.value as? [String:Any] else {return}
        guard let data = json["data"] as? [[String:Any]] else {return}
        printD(data)
        guard let status = json["status"] as? Bool else { return}
        printD(status)

        if status == true {
            guard let data = json["data"] as? [[String:Any]] else {return}
            for userData in data {
                self.userModel.append(UserModel(json: userData))
                printD(self.userModel)
            }
            CommonClass.shared.showSuccessMessage("\(json["msg"] as? String ?? "")", inViewController: self)
        }

        else if status == false {
            CommonClass.shared.showErrorMessage("\(json["msg"] as? String ?? "")", inViewController: self)
        }
        else  {
            CommonClass.shared.showErrorMessage("Server Connection Error. Please try again later", inViewController: self)
        }

        self.tableView.reloadData()
    }
}
现在我遇到的问题是,我必须在同一个类的另一个api中使用我的userModel数据,我不知道如何才能做到这一点。在rejectRequest函数中,我需要访问一些结构数据,但我不知道如何才能做到这一点。请帮忙

private func rejectRequest() {
    let user = userModel // I need to use userModel data for parameter 
    let param: [String:Any] = ["from_user": "", "to_user": "", "request_id": "", "device_token": device_token ?? ""]

    Alamofire.request(Constants.API.url("end_request"), method: .post, parameters: param, encoding: JSONEncoding.default, headers: nil).responseJSON {
        (response:DataResponse<Any>) in

    }
}

创建一个结构来保存在应用程序中共享的公共数据。下面是一个DataController示例,它可以容纳不同的模型或模型阵列/目录:

struct DataController {

    // MARK: - User management

    struct Users {
        static var users: [User] = []
        static var currentUser: User = User()

        static func addUser(_ user: User) {
             users.append(user)
        }

        static func findUserById(_ id: Int) -> User? {
            // Find the users that match the id (should only be one!)
            let users = user.filter { $0.id = id }
            return users.count == 1 ? users[0] : nil
        }
    }
}
添加用户:

 DataController.Users.addUser(user)
通过以下方式从其他地方访问:

DataController.Users.currentUser
通过id查找用户:

if let user = DataController.Users.findUserById(id) {
     ... do stuff ... 
}
顺便说一句,在解析JSON数据时使用guard语句可能更简单:

init(json: [String:Any]) {

    guard 
        let id = json["id"] as? Int,
        let uuid = json["uuid"] as? Int,
        let user_name = json["user_name"] as? String,
        let name = json["name"] as? String,
        let email = json["email"] as? String
    else {
        return // Fail
    }

    self.id = id
    self.uuid = uuid
    self.user_name = user_name
    self.name = name
    self.email = email
}

但我如何从结构访问特定值我需要使用结构中的id值在参数中传递此值请求\u id:这里我需要结构中的id好的,但我是否从该方法访问任何值,如uuid、名称等?通过id获取用户,然后通过点符号访问值,例如user.uuid、user.name,等等,你能解释一下用户结构中的用户是什么吗?我只是以用户为例。替换为您的用户模型。