Функция преобразования в глобальную переменную при быстрой ошибке «Initializer 'init (_ :)' требует, чтобы« [_] »соответствовало« LosslessStringConvertible » - PullRequest
0 голосов
/ 21 мая 2019

У меня есть данные JSON, которые я просто анализирую с помощью JSONDecoder.Я создал структуру для декодирования этих данных JSON и хочу, чтобы это значение из этого JSON было глобальной переменной, чтобы я мог передать ее другому контроллеру.Я уже создал эту глобальную переменную и просто хочу поместить свою переменную JSON в эту глобальную переменную.

Поскольку это Int, а моя глобальная переменная - string, поэтому я пытаюсь преобразовать еесначала с: var a = string(jsonvalue), но я получаю эту ошибку:

Инициализатор 'init(_:)' требует, чтобы '[_]' соответствовал 'LosslessStringConvertible'

Все это я ищуиз Интернета, я все еще начинающий разработчик, поэтому мне нужна ваша помощь, чтобы завершить мой проект.

это моя глобальная переменная:

            struct GlobalVariable {

                static var ProjectId = String() //project id
                static var UserId = String() // User Id
                var GroupId = String() // group Id
                static var Status = String() //Status for login 

                init(dictionary : [String : Any]) {
                    id = dictionary ["id"] as! Int
                    name = dictionary ["name"] as! String
                    email = dictionary ["email"] as! String
                    status = dictionary ["status"] as! String
                }

                enum CodingKeys : String, CodingKey {
                   case id = "id"
                   case name = "name"
                   case email = "email"
                   case status = "status"
                }
            }
        }

        var Loginnn = [login]()

        struct login : Codable {
            let id : Int
            let name : String
            let email : String
            let status : String
        }

        let parsing = try JSONDecoder().decode([login].self,    from: data)
        print(parsing)
        self.Loginnn = parsing

        //This is for login verification
        let stats = self.Loginnn.map { $0.status}

        //this is the Id value I try to make into global Variable
        let ids = self.Loginnn.map { $0.id} // I use this map    function to extract that value and put it into the variable 

        GlobalVariable.UserId = String(ids)// I use string to   convert from int to string. --> this is where the error begin 


        if stats.contains("1"){ // Login Success
            print("Login Success")
            DispatchQueue.main.async {
                self.appDelegate.loginSeque()
            }
        }else if stats.isEmpty {//fail login 
            let action = UIAlertAction(title: "Got It", style: .default, handler: nil)
            let alert = UIAlertController(title: "Wrong Email / Password", message: "Please Try Again ", preferredStyle: .alert)
            alert.addAction(action)
            self.present(alert, animated: true, completion: nil)
        }
    }catch{
        print(error)
    }
}.resume()

из этой строки кода: let ids = self.Loginnn.map { $0.id}, я могу получить это значение идентификатора из JSONDecoder, но когда я пытаюсь поместить его в глобальную переменную, он выдает ошибку, подобную этой:

Initializer 'init(_:)' требует, чтобы '[_]' соответствует 'LosslessStringConvertible'

Мне нужна помощь, потому что я все еще младший разработчик, поэтому я не знаю, правильный ли этот код.

1 Ответ

0 голосов
/ 22 мая 2019

Предполагая, что вы получите только одну строку обратно в своем сообщении json, или только первый интересный вы можете сделать

if let id = ids.first {
    let GlobalVariable.UserId = String(id)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...