我拥有我只用jsondecoder解析的JSON数据。我制作了一个结构来解码此JSON数据,我希望该值从该JSON成为一个全局变量,因此我可以将其传递给其他控制器。我已经使这个全局变量了,我只想将我的JSON变量放入此全局变量。
因为它是Int
,而我的全局变量是string
,所以我尝试先使用:var a = string(jsonvalue)
进行转换,但是我会收到此错误:
initializer
'init(_:)'
要求'[_]'
符合'Lossless stringConvertible'
所有这些我都是从网络搜索的,我仍然是初级开发人员,所以我需要您的帮助来完成我的项目。
这是我的全局变量:
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
获得该ID值,但是当我尝试将其放入全局变量时,它显示出这样的错误:
初始器
'init(_:)'
要求'[_]'
符合" Lossless Convertible"
我需要帮助,因为我仍然是初级开发人员,所以我不知道此代码是否正确。
假设您只在JSON消息中恢复一行,或者只有第一个很有趣,您才能做
if let id = ids.first {
let GlobalVariable.UserId = String(id)
}