遍历 object 的属性(在 Realm 中,也可能不在 Realm 中)
Iterate over properties of an object (in Realm, or maybe not)
我正在开发一个使用 Realm 作为数据库的项目(稍后会提到)。我刚刚发现 key-value 编码,我想用它来将 TSV table 转换为 object 属性(使用 table 中的列 headers 作为按键)。现在它看起来像这样:
let mirror = Mirror(reflecting: newSong)
for property in mirror.children {
if let index = headers.index(of: property.label!) {
newSong.setValue(headers[index], forKey: property.label!)
} else {
propertiesWithoutHeaders.append(property.label!)
}
}
有没有办法在没有镜像的情况下迭代属性?我真的可以发誓,我在 Realm 文档(或者甚至可能在 Apple 的 KVC 文档)中读到,你可以做类似 for property in Song.properties
或 for property in Song.self.properties
的事情来实现同样的事情。
除了效率更高之外,我想这样做的主要原因是因为在我读到这篇文章的同一个地方,我想他们说迭代(或 KVC?)只适用于字符串、Ints、Bools 和 Dates,因此它会自动跳过 Objects 的属性(因为您不能以相同的方式设置它们)。上面的代码实际上是我的代码的简化,在实际版本中我目前跳过 Objects 像这样:
let propertiesToSkip = ["title", "artist", "genre"]
for property in mirror.children where !propertiesToSkip.contains(property.label!) {
...
这 .properties
是我想象出来的吗?或者,有没有办法以这种方式迭代,自动跳过 Objects/Classes 而不必像我上面那样命名它们?
谢谢:)
不,你没想到。 :)
Realm 在两个地方公开包含数据库中每种模型的属性的模式:在父 Realm
实例中,或在 Object
本身中。
在 Realm
实例中:
// Get an instance of the Realm object
let realm = try! Realm()
// Get the object schema for just the Mirror class. This contains the property names
let mirrorSchema = realm.schema["Mirror"]
// Iterate through each property and print its name
for property in mirrorSchema.properties {
print(property.name)
}
领域 Object
实例通过 Object.objectSchema
属性.
公开该对象的架构
查看 Realm Swift 文档中的 schema
property of Realm
,了解有关您可以从模式属性中获取何种数据的更多信息。 :)
我正在开发一个使用 Realm 作为数据库的项目(稍后会提到)。我刚刚发现 key-value 编码,我想用它来将 TSV table 转换为 object 属性(使用 table 中的列 headers 作为按键)。现在它看起来像这样:
let mirror = Mirror(reflecting: newSong)
for property in mirror.children {
if let index = headers.index(of: property.label!) {
newSong.setValue(headers[index], forKey: property.label!)
} else {
propertiesWithoutHeaders.append(property.label!)
}
}
有没有办法在没有镜像的情况下迭代属性?我真的可以发誓,我在 Realm 文档(或者甚至可能在 Apple 的 KVC 文档)中读到,你可以做类似 for property in Song.properties
或 for property in Song.self.properties
的事情来实现同样的事情。
除了效率更高之外,我想这样做的主要原因是因为在我读到这篇文章的同一个地方,我想他们说迭代(或 KVC?)只适用于字符串、Ints、Bools 和 Dates,因此它会自动跳过 Objects 的属性(因为您不能以相同的方式设置它们)。上面的代码实际上是我的代码的简化,在实际版本中我目前跳过 Objects 像这样:
let propertiesToSkip = ["title", "artist", "genre"]
for property in mirror.children where !propertiesToSkip.contains(property.label!) {
...
这 .properties
是我想象出来的吗?或者,有没有办法以这种方式迭代,自动跳过 Objects/Classes 而不必像我上面那样命名它们?
谢谢:)
不,你没想到。 :)
Realm 在两个地方公开包含数据库中每种模型的属性的模式:在父 Realm
实例中,或在 Object
本身中。
在 Realm
实例中:
// Get an instance of the Realm object
let realm = try! Realm()
// Get the object schema for just the Mirror class. This contains the property names
let mirrorSchema = realm.schema["Mirror"]
// Iterate through each property and print its name
for property in mirrorSchema.properties {
print(property.name)
}
领域 Object
实例通过 Object.objectSchema
属性.
查看 Realm Swift 文档中的 schema
property of Realm
,了解有关您可以从模式属性中获取何种数据的更多信息。 :)