gpt4 book ai didi

ios - 将数据传递给对象后,对象值返回 nil

转载 作者:行者123 更新时间:2023-11-28 07:50:32 24 4
gpt4 key购买 nike

我正在尝试学习 MVVM 设计模式并编写简洁易读的代码。问题是我从将我的 json 响应对象映射到的对象中得到 nil 值。我已经检查了大部分我正在做的事情,但我仍然得到 nils。这是我的代码。

搜索对象:

class SearchResultObj: NSObject {

var status : Bool
var name: String?
var publicKey: String?
var profileImage: String?
var accountType: String?

init (model: SearchResultObj) {

if let value = model.status as? Bool {
self.status = value
}else{
self.status = false
}
if let fullname = model.name {
self.name = fullname
}else{
self.name = nil
}

if let key = model.publicKey {
self.publicKey = key
}else{
self.publicKey = nil
}

if let profimage = model.profileImage {
self.profileImage = profimage
}else{
self.profileImage = nil
}
if let account = model.accountType {
self.accountType = account
}else{
self.accountType = nil
}
}
}

View 模型

    func searchDataRequested(_ apiUrl: String,_ country: String,_ phone:String) {

var search: SearchResultObj?

init() {
self.search = SearchResultObj()
}


let service = ServiceCall(urlServiceCall: apiUrl, country: country, phone: phone)
let url = URL(string: apiUrl)
let request = URLRequest(url: url!)
let country = country
let phone = phone


service.fetchJson(request: request, customerCountry: country, mobileNumber: phone) // making service call and returns json
{ (ok, json) in
print("CallBack response : \(String(describing: json))")

self.jsonMappingToSearch(json! as AnyObject)
}
}

func jsonMappingToSearch(_ json: AnyObject) {

print( json["fullName"] as! String?) // This returns a value
search?.name = json["fullName"] as! String?
search?.profileImage = json["image"] as! String?
search?.publicKey = json["publicKey"] as! String?
search?.accountType = json["accountType"] as! String?
search?.status = (json["status"] as! Bool?)!
testResponse()
}

func testResponse(){

// testing to see if my object contains anything
print(search?.name as Any )
print(search?.profileImage as Any )
print(search?.publicKey as Any )
print(search?.accountType as Any )
print(search?.status as Any )
}

所以我在一个单独的类中进行服务调用,然后将完成处理程序中的响应传递给方法 self.jsonMappingToSearch(json! as AnyObject)。之后我想将响应映射到我的 SearchObject。当我打印出 json 对象的值时,我确实获得了实际值,但是在 map 函数运行后,我无法获得对象中的任何值,因为它返回所有 nils。

最佳答案

如果您真的在寻找干净、可读的代码,您应该查看 Codable Protocol在 Swift 4 中。这样,您的代码将变成如下所示,而不是具有大量手动 JSON 映射,并且应该处理 JSON 数据中的 nils):

class SearchResultObj: NSObject, Codable {

var status = false
var name: String?
var publicKey: String?
var profileImage: String?
var accountType: String?

enum CodingKeys: String, CodingKey {
case status
case name = "fullName"
case publicKey
case profileImage = "image"
case accountType
}
}

func searchDataRequested(_ apiUrl: String,_ country: String,_ phone:String) {

let service = ServiceCall(urlServiceCall: apiUrl, country: country, phone: phone)
let url = URL(string: apiUrl)
let request = URLRequest(url: url!)
let country = country
let phone = phone

service.fetchJson(request: request, customerCountry: country, mobileNumber: phone) // making service call and returns json
{ (ok, json) in
print("CallBack response : \(String(describing: json))")

//I'm assuming your JSON is just a Data representation of the JSON string here
let decoder = JSONDecoder()
let result = decoder.decode(SearchResultObj.self, from: json)

//Add breakpoint or print to verify the result here
}
}

如果您可以发布源 JSON,如果您仍然遇到问题,那也会有所帮助。

关于ios - 将数据传递给对象后,对象值返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49801954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com