Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
RealmSwift也需要Realm_Swift_Realm_Genome - Fatal编程技术网

RealmSwift也需要Realm

RealmSwift也需要Realm,swift,realm,genome,Swift,Realm,Genome,我正在将一个项目迁移到Swift 3,在RealmSwift(2.6.1)和Genome(3.2.0)方面遇到了一些问题。我在Xcode中得到了关于Realm的错误,它说我需要这些初始化: required convenience init(realm: RLMRealm, schema: RLMObjectSchema) { self.init(realm: realm, schema: schema) } required convenience init(value: Any,

我正在将一个项目迁移到Swift 3,在RealmSwift(2.6.1)和Genome(3.2.0)方面遇到了一些问题。我在Xcode中得到了关于Realm的错误,它说我需要这些初始化:

required convenience init(realm: RLMRealm, schema: RLMObjectSchema) {
    self.init(realm: realm, schema: schema)
}

required convenience init(value: Any, schema: RLMSchema) {
    self.init(value: value, schema: schema)
}

然而,这需要在RealmSwift之外导入Realm,当我的类初始化时,它试图使用RLMRealm而不是Realm。警告说“必需的”初始值设定项“init(realm:schema:)”必须由“Object”的子类提供,但是必需的init使用RLMRealm而不是realm。有什么建议吗

我也在使用基因组,这需要初始化,这就是为什么Realm首先要求初始化者的原因:

required convenience init(node: Node, in context: Context) throws {
    self.init()
}
所以init看起来是这样的:

class BaseModel : RealmSwift.Object, MappableBase, Identifiable {

required init() {
    super.init()
}

required convenience init(node: Node, in context: Context) throws {
    self.init()
}

required convenience init(realm: RLMRealm, schema: RLMObjectSchema) {
    self.init(realm: realm, schema: schema)
}

required convenience init(value: Any, schema: RLMSchema) {
    self.init(value: value, schema: schema)
}
在Swift 2.3中(使用相应的Swift 2.3版本的Realm和Genome),没有任何初始值设定项,一切都正常工作,但现在它不工作了

整个模型:

import RealmSwift
import Genome
import Realm

protocol Identifiable {
    var identifier: String { get set }
}


class BaseModel : RealmSwift.Object, MappableBase, Identifiable {

required init() {
    super.init()
}

required convenience init(node: Node, in context: Context) throws {
    try self.init(node: node, in: context)
}

required convenience init(realm: RLMRealm, schema: RLMObjectSchema) {
    self.init(realm: realm, schema: schema)
}

required convenience init(value: Any, schema: RLMSchema) {
    self.init(value: value, schema: schema)
}

dynamic var identifier = ""
dynamic var updatedAt: Date?

override static func primaryKey() -> String {
    return "identifier"
}

static func newInstance(_ node: Node, context: Context = EmptyNode) throws -> Self {
    let map = Map(node: node, in: context)
    let new = self.init()
    try new.sequence(map)
    return new
}

func sequence(_ map: Map) throws {
    switch map.type {
    case .fromNode:
        if self.identifier.isEmpty {
            // only map id if there isn't one, otherwise Realm complains about modified primaryKey
            try self.identifier <~ map["id"]
        }
        updatedAt = Date()
    case .toNode:
        if !self.identifier.isEmpty {
            try self.identifier ~> map["id"]
        }
    }
}

func objectRepresentation() -> [String : AnyObject] {
    if let result = try? self.toObject() {
        return result as? [String : AnyObject] ?? [:]
    } else {
        return [:]
    }
}

static func objectInRealm(_ realm: Realm, identifier: String?) -> Self? {
    if let identifier = identifier {
        return realm.object(ofType: self, forPrimaryKey: identifier)
    } else {
        return nil
    }
}

static func createOrFindObject(inRealm realm: Realm, identifier: String) -> Self {
    if let foundObject = realm.object(ofType: self, forPrimaryKey: identifier) {
        return foundObject
    } else {
        return realm.create(self, value: ["identifier" : identifier], update: false)
    }
}
}
导入RealmSwift
导入基因组
进口领域
协议可识别{
变量标识符:字符串{get set}
}
类BaseModel:RealmSwift.Object,MappableBase,可识别{
必需的init(){
super.init()
}
必需的便利初始化(节点:节点,在上下文:上下文中)抛出{
尝试self.init(节点:节点,在:上下文中)
}
必需的便利初始化(领域:RLMRealm,架构:RLMObjectSchema){
init(领域:领域,模式:模式)
}
必需的便利初始化(值:Any,模式:RLMSchema){
init(值:value,模式:schema)
}
动态变量标识符=“”
动态变量更新日期:日期?
重写静态func primaryKey()->String{
返回“标识符”
}
静态func newInstance(uNode:node,context:context=EmptyNode)抛出->Self{
让map=map(节点:节点,在:上下文中)
让new=self.init()
尝试新建。序列(映射)
还新
}
func序列(u-map:map)抛出{
开关映射类型{
case.fromNode:
如果self.identifier.isEmpty{
//若并没有映射id,则仅映射id,否则域会抱怨修改了primaryKey
尝试self.identifier映射[“id”]
}
}
}
func objectRepresentation()->[字符串:AnyObject]{
如果let result=try?self.toObject(){
返回结果为?[String:AnyObject]??[:]
}否则{
返回[:]
}
}
静态func objectInRealm(urealm:realm,标识符:String?)->Self{
如果let identifier=identifier{
返回realm.object(类型:self,forPrimaryKey:identifier)
}否则{
归零
}
}
静态func createOrFindObject(在realm领域:领域,标识符:字符串)->Self{
如果让foundObject=realm.object(of type:self,forPrimaryKey:identifier){
返回foundObject
}否则{
返回realm.create(self,值:[“identifier”:identifier],更新:false)
}
}
}

您不需要重写
init(领域:schema:)
init(领域:schema:)
,只需定义
便利性所需的init(节点:in:)抛出,如下所示

class BaseModel : RealmSwift.Object, MappableBase, Identifiable {

    convenience required init(node: Node, in context: Context) throws {
        try self.init(node: node, in: context)
    }

    ...

}

您是否在类中声明了任何非可选的、未初始化的属性?没有,我已经检查过了,但考虑得很好。通常,只有当类中的某些内容需要初始化时,才需要重写必需的初始值设定项,如属性。警告显示“必需的”初始值设定项“init(领域:架构:)'必须由'Object'的子类提供,但所需的init使用的是RLMRealm,而不是Realm@WillowPuge您或Realm的其他人对此有什么见解吗?