是否可以将字典中的特定键用于具有自定义 tableViewCell 的非静态 tableView
Is it possible to use a specific keys in a dictionary for a non static tableView with a custom tableViewCell
我有一个 class 的实例,我想像字典一样使用它作为 tableView 的数据源。
这是 AlimentTest 实例:
class AlimentModificationData {
static var AlimentTest : AlimentObject = AlimentObject(nomAliment: "Amandes", poids: 100, calories: 108, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false)
static var listNutriments : [String] = ["aRetinol", "aBetacarotene", "vitamineC", "vitamineB1", "calcium", "omega3"]
}
我想将此实例“AlimentTest”用于 tableView,以及带有标识符的自定义单元格。
但我只想使用 名为 listNutriments.
的静态数组中指定的键
最后,我希望我的 tableView 为 dequeureusableCell 显示类似这样的内容:
视黄醇 8
aβ-胡萝卜素 1
维生素 C 0.8
维生素 B1 0.18
钙 248
omega3 0.06
我该怎么做?
创建 AlimentTest 方法,生成字典,然后使用 listNutriments 过滤它
例如
extension AlimentObject {
func asDict [String : Any] {
var dict: [String : Any] = [:]
dict["nomAliment"] = nomAliment
dict["poids"] = poids
dict["calories"] = calories
dict["proteines"] = proteines
dict["lipides"] = lipides
...here fill more info to dict
return dict
}
}
然后使用它根据您的过滤器名称生成列表:
let filtered = alimentObject.asDict.filter({ listNutriments.contains([=11=].key)})
或者如果你想在不手动创建 asDict 方法的情况下使用它,请使用这个(基于 ):
extension AlimentObject {
func listPropertiesWithValues(reflect: Mirror? = nil) -> [String : Any] {
var dict = [String : Any]()
let mirror = reflect ?? Mirror(reflecting: self)
if mirror.superclassMirror != nil {
self.listPropertiesWithValues(reflect: mirror.superclassMirror)
}
for (index, attr) in mirror.children.enumerated() {
if let property_name = attr.label {
dict[property_name] = attr.value
}
}
}
}
然后你会使用:
let filtered = alimentObject.listPropertiesWithValues().filter({ listNutriments.contains([=13=].key)})
我有一个 class 的实例,我想像字典一样使用它作为 tableView 的数据源。 这是 AlimentTest 实例:
class AlimentModificationData {
static var AlimentTest : AlimentObject = AlimentObject(nomAliment: "Amandes", poids: 100, calories: 108, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false)
static var listNutriments : [String] = ["aRetinol", "aBetacarotene", "vitamineC", "vitamineB1", "calcium", "omega3"]
}
我想将此实例“AlimentTest”用于 tableView,以及带有标识符的自定义单元格。 但我只想使用 名为 listNutriments.
的静态数组中指定的键最后,我希望我的 tableView 为 dequeureusableCell 显示类似这样的内容:
视黄醇 8
aβ-胡萝卜素 1
维生素 C 0.8
维生素 B1 0.18
钙 248
omega3 0.06
我该怎么做?
创建 AlimentTest 方法,生成字典,然后使用 listNutriments 过滤它 例如
extension AlimentObject {
func asDict [String : Any] {
var dict: [String : Any] = [:]
dict["nomAliment"] = nomAliment
dict["poids"] = poids
dict["calories"] = calories
dict["proteines"] = proteines
dict["lipides"] = lipides
...here fill more info to dict
return dict
}
}
然后使用它根据您的过滤器名称生成列表:
let filtered = alimentObject.asDict.filter({ listNutriments.contains([=11=].key)})
或者如果你想在不手动创建 asDict 方法的情况下使用它,请使用这个(基于
extension AlimentObject {
func listPropertiesWithValues(reflect: Mirror? = nil) -> [String : Any] {
var dict = [String : Any]()
let mirror = reflect ?? Mirror(reflecting: self)
if mirror.superclassMirror != nil {
self.listPropertiesWithValues(reflect: mirror.superclassMirror)
}
for (index, attr) in mirror.children.enumerated() {
if let property_name = attr.label {
dict[property_name] = attr.value
}
}
}
}
然后你会使用:
let filtered = alimentObject.listPropertiesWithValues().filter({ listNutriments.contains([=13=].key)})