创建 class 对象时如何处理缺失值?
How do I handle missing values when creating a class object?
假设我有一个 class 呼叫者:
class Person: NSObject {
let name:String
let gender:String
let age:Int
init(name: String, gender: String, age: Int) {
self.name = name
self.gender = gender
self.age = age
}
class func createPerson(person:[String:AnyObject]) -> Person {
let name = person["name"] as? String
let gender = person["gender"] as? String
let age = person["age"] as? Int
return Person(name: name!, gender: gender!, age: age!)
}
}
我从 json 端点检索数据,我想将其转换为 class "Person" 的对象。我使用 class 函数 "createPerson" 来做到这一点。
处理 url 端点缺少值的情况的最佳方法是什么?
按照我目前的代码,如果缺少其中一个值,此行将使程序崩溃:
return Person(name: name!, gender: gender!, age: age!)
我知道这是因为我强制解包了变量,但是我应该如何构建我的代码以说明变量值可能丢失的事实?
我应该将所有内容都声明为可选吗?
let name:String?
let gender:String?
let age:Int?
init(name: String?, gender:String?, age:Int?) {
self.name = name
self.gender = gender
self.age = age
}
不胜感激。谢谢!
无需编写 class 函数并创建自定义初始化:
let entity = Person()
if let name = person["name"] as? String {
entity.name = name
}
if let gender = person["gender"] as? String {
entity.gender = gender
}
if let age = person["age"] as? Int {
entity.age = age
}
这里有一个使用对象映射器的例子
import Foundation
import ObjectMapper
class PersonMapping: Mappable {
// MARK: - Variables & Constants
var name : String
var gender : String
var age : Int
required init?(_ map: Map) {
name = ""
gender = ""
age = 0
}
func mapping(map: Map) {
name <- map["name"]
gender <- map["gender"]
age <- map["age"]
}
}
并且您可以将其用作
// result is your JSON object
if let data = Mapper<PersonMapping>().map(result){
print(data.name)
print(data.gender)
print(data.age)
}
希望对您有所帮助:-)
假设我有一个 class 呼叫者:
class Person: NSObject {
let name:String
let gender:String
let age:Int
init(name: String, gender: String, age: Int) {
self.name = name
self.gender = gender
self.age = age
}
class func createPerson(person:[String:AnyObject]) -> Person {
let name = person["name"] as? String
let gender = person["gender"] as? String
let age = person["age"] as? Int
return Person(name: name!, gender: gender!, age: age!)
}
}
我从 json 端点检索数据,我想将其转换为 class "Person" 的对象。我使用 class 函数 "createPerson" 来做到这一点。
处理 url 端点缺少值的情况的最佳方法是什么?
按照我目前的代码,如果缺少其中一个值,此行将使程序崩溃:
return Person(name: name!, gender: gender!, age: age!)
我知道这是因为我强制解包了变量,但是我应该如何构建我的代码以说明变量值可能丢失的事实?
我应该将所有内容都声明为可选吗?
let name:String?
let gender:String?
let age:Int?
init(name: String?, gender:String?, age:Int?) {
self.name = name
self.gender = gender
self.age = age
}
不胜感激。谢谢!
无需编写 class 函数并创建自定义初始化:
let entity = Person()
if let name = person["name"] as? String {
entity.name = name
}
if let gender = person["gender"] as? String {
entity.gender = gender
}
if let age = person["age"] as? Int {
entity.age = age
}
这里有一个使用对象映射器的例子
import Foundation
import ObjectMapper
class PersonMapping: Mappable {
// MARK: - Variables & Constants
var name : String
var gender : String
var age : Int
required init?(_ map: Map) {
name = ""
gender = ""
age = 0
}
func mapping(map: Map) {
name <- map["name"]
gender <- map["gender"]
age <- map["age"]
}
}
并且您可以将其用作
// result is your JSON object
if let data = Mapper<PersonMapping>().map(result){
print(data.name)
print(data.gender)
print(data.age)
}
希望对您有所帮助:-)