我到处搜索但无济于事:
您可以将自定义类转换为NSDictionary吗?
用例:
我有一个包含某些属性的Todo
类,我想用taskRef.setValue(task as? NSDictionary)
将其保存到Firebase但是我甚至不知道这是否可行。
这是我的Todo课程:
class Todo : NSObject{
var name: String
var desc: String
var date: Double
var location: [Double]?
var snapshot: FIRDataSnapshot?
init(name: String, desc: String? = nil, date: Double, location: [Double]? = nil){
self.name = name
self.desc = desc!
self.date = date
self.snapshot = nil
self.location = location
}
convenience init(name: String, desc: String? = nil, date: NSDate, location: CLLocationCoordinate2D? = nil){
var serLoc: [Double]? = nil
if let location = location {
serLoc = [location.latitude, location.longitude]
}
self.init(name: name, desc: desc, date: date.timeIntervalSince1970 as Double, location: serLoc)
}
convenience init(snapshot: FIRDataSnapshot){
let dict = snapshot.value as! [String: AnyObject]
let location = dict["location"] as? [Double]
self.init(name: dict["name"] as! String, desc: dict["desc"] as? String, date: dict["date"] as! Double, location: location)
self.snapshot = snapshot
}
convenience override init(){
self.init(name: "", desc: "", date: NSDate())
}
}
答案 0 :(得分:2)
不,您不能将自定义类“强制转换”为NSDictionary
。 (或者也是一个Swift字典。)Casting告诉编译器“不要担心,这个对象实际上是一个字典。相信我。”铸造不是转换。如果您尝试将不是字典的自定义对象CAST到字典,它将不会 BE 字典。
您需要将对象转换为字典,而不是将其转换为字典。正如Larme在他的评论中所建议的那样,在你的类中添加一个toDictionary
方法,该方法返回一个字典,该字典将对象的属性编码为字典中的键/值对。
然后创建一个将字典作为参数的自定义init方法。
我似乎记得读过Swift方法可以让你查询对象的属性并得到它们的名字。你可以编写你的toDictionary代码来使用它。如果我没记错,他们会使用Mirror
和.children
。如果您不想编写自定义代码来转换对象的属性,请查看Mirror。
答案 1 :(得分:1)
如果字典不限于属性列表类型,请添加属性
var dictionaryRepresentation : [String:AnyObject] {
var result : [String:AnyObject] = ["name" : name, "desc" : desc, "date" : date]
result["snapshot"] = snapshot
result["location"] = location
return result
}