RealmSwift:Casting Object.subscript AnyObject?列出<>

时间:2016-04-13 16:54:19

标签: swift realm

我正在编写一个自定义更新方法,以便控制如何在Realm中表示值。采用的方法是将传入的键:值(来自JSON)与对象的objectSchema.properties进行匹配,并相应地转换值。一切都是通用的,使用Object.subscript存储值。

对于to-one关系,其中属性类型为.Object,系统可以递归并创建或更新由Property.objectClassName确定的类型的相应嵌套对象。

对于to-many关系,其中属性类型为.Array我们必须修改objectClassName类型的对象List。然而,列表是通用的,因此List<具体类型的objectClassName>。

As Object.subscript返回AnyObject类型的值?我们需要将其转换为可以作为列表处理的内容,而不管其包含的类型。如何实现这一目标?

(我已经替换了下面的示例来更好地说明问题) e.g。

typealias ValueDictionary = Dictionary<String, AnyObject>

func update(object: Object, values: ValueDictionary) {

    for property in object.objectSchema.properties {

        if let value = values[property.name] {

            var newValue: AnyObject?

            switch property.type {
                case .Object:
                    let objectType = NSClassFromString(
                        "mymodule" + property.objectClassName) as! Object.Type

                    newValue = relatedObjectWithType(objectType, 
                        values: value as! ValueDictionary)

                case .Array:
                    let objectType = NSClassFromString(
                        "mymodule" + property.objectClassName) as! Object.Type

                    newValue = listOfRelatedObjectsWithType(objectType, 
                        values: value as! [ValueDictionary])

                default:
                    // Convert primitive values, date strings, etc.
                    newValue = coerceValue(value, toPropertyType:property.type)
            }   
        }
    }

func relatedObjectWithClassName(type: Object.Type, values: ValueDictionary) -> Object {
    // To-one relations can be instantiated using Object.Type.
    var object = type.init()
    update(object, values)
    return object
}

// To-many relation are generic so there's no way to treat them dynamically.
func listOfRelatedObjectsWithType(type: Object.Type, values: [ValueDictionary]) -> List {
}

0 个答案:

没有答案