我需要用CoreData保存一些数据。一般来说,这根本不是问题。问题是,数据是用EVReflection创建的,因此继承了类EVObject。为了将收集到的数据保存到CoreData,它们还必须继承NSManagedObject。问题是swift不允许你继承多个类。如果有什么建议我会很感激。
class Device : EVObject
{
var channel : [Channel] = [Channel]()
var name : String = ""
var ise_id : Int = 0
var unreach : Bool = false
var sticky_unreach : Bool = false
var config_pending : Bool = false
override internal func propertyMapping() -> [(String?, String?)] {
return [("name", "_name"), ("ise_id", "_ise_id"), ("unreach", "_unreach"), ("sticky_unreach", "_sticky_unreach"), ("config_pending", "_config_pending")]
}
}
发布于 2017-03-07 23:12:55
你不需要继承。您可以扩展它们。示例:
class User : NSManagedObject{
@NSManaged .....
}
//Extension
import EVReflection
extension User : EVReflectable { }
https://github.com/evermeer/EVReflection#extending-existing-objects
发布于 2016-05-25 08:53:36
注意,我不知道EVReflection,但我认为这个答案可以普遍适用。
不要使用多重继承。有两个独立的类和一个用于从一个对象创建/加载/更新另一个对象的机制。协议可能允许以一种最小化转换样板的方式来完成这项工作(如果您能够以安全的方式知道密钥名称,则可能使用valueForKey(_:)
和setValue(_:forKey)
。
甚至可能不需要有一个NSManagedObject子类,只需要在所有类中有一个NSManagedObject实例,并根据需要加载/创建/保存它。
发布于 2016-08-26 11:47:08
这取决于您希望从EVReflection中使用什么功能。因为NSManagedObject也有NSObject作为它的基类,所以只需将NSManagedObject而不是EVObject设置为基类,就可以使用大多数函数。
您唯一需要做的就是实现EVObject方法中的代码片段,而不是直接调用EVObject函数。几乎任何函数都有一个方便的方法,它将调用相应的EVReflection函数。
如果您将来有任何问题,请在GitHub上报告此问题。
https://stackoverflow.com/questions/37430730
复制