如何解决是否可以在字典中使用具有自定义tableViewCell的非静态tableView的特定键
我有一个类的实例,我想像字典一样使用它作为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,以及带有标识符的customcell。 但是我只想使用仅在名为listNutriments的静态数组中指定的键。
最后,我希望我的tableView为dequeureusableCell显示这样的内容:
aRetinol 8
β-胡萝卜素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($0.key)})
或者如果您想在不手动创建asDict方法的情况下使用它,请使用此方法(基于How to list all Variables of a class in swift):
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($0.key)})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。