Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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,我需要获取嵌套对象的编码 class person { var name: String? var phone: String? var address: Address? } class Address { var area: String? var city: String? } 我试过了 let data = try? JSONEncoder().encode(person) let json = try? JSONSerialization.jsonObject(with: data

我需要获取嵌套对象的编码

class person {
var name: String?
var phone: String?
var address: Address?
}

class Address {
var area: String?
var city: String?
}
我试过了

let data = try? JSONEncoder().encode(person)
let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any]
但地址-键-值对无法获取

struct Person: Encodable {
    var name, phone: String
    var address: Address
}

struct Address: Encodable {
    var area, city: String
}
使您需要编码的模型符合可编码协议 类型应以大写字母开头 如果你确信属性不会为零,不要让它们成为可选的 您可以使模型成为结构而不是类 然后对你的对象进行编码

let data = try? JSONEncoder().encode(person)
当您需要打印编码数据时,需要将其转换为字符串

如果您需要以关键人物和人物对象作为值对对象进行编码,请对字典进行编码

let data = try! JSONEncoder().encode(["person": person])
let json = String(data: data, encoding: .utf8) ?? ""
只需实现可编码


您想通过包含缺少的与Person和Address类相关的代码来更新您的问题吗?要使用JSONeCoder对类进行编码,您必须采用Codable。谢谢Robert,但是我需要json{Person:{name:name,phone:phone number,Address:{area:area,city:city name}}}}Person也应该是可编码的。@Satishedy,然后执行encoder.encode[person:person],其中person是person类型的实例,encoder是JSONEncoder@RobertDresler,因为OP要求在上面的注释中对整个person进行编码。带有所有字段。@user28434 yes,在注释yes中。但问题是,这并不清楚
let data = try! JSONEncoder().encode(["person": person])
let json = String(data: data, encoding: .utf8) ?? ""
class Person: Encodable {
  var name: String?
  var phone: String?
  var address: Address?
}

class Address: Encodable {
  var area: String?
  var city: String?
}
let address = Address()
address.area = "Area"
address.city = "City"
let person = Person()
person.name = "name"
person.address = address

let encoded = try JSONEncoder().encode(person)