问题描述
我刚刚学习了如何从CoreData数据库中检索属性键并将其放入数组中。除了每次方法运行时,它每次都以不同的顺序生成数据集外,一切正常。我现在只有3个键-名称,性别,类型。
是否可以做一些事情来使每次以相同的顺序遍历键?我将提供更多属性,并使用该信息填充表格视图,因此我希望它保持一致。
["type","sex","name"]
["Goat","F","Bob"]
["sex","name","type"]
["M","Jack","Goat"]
["name","type"]
["Bob","Goat"]
["type","sex"]
["Goat","M"]
["name","Goat"]
func generateAttributeList(_ animal:Animal) -> Array<String> {
let dictAttributes = animal.entity.attributesByName
var arrAttributeTitles:Array<String> = []
for (key,_) in dictAttributes {
arrAttributeTitles.append(key)
}
return arrAttributeTitles
}
//makes the Value Array
func generateValueList () {
for (name,_) in animal!.entity.attributesByName {
let animalValue = animal!.value(forKey: name) as! String
childValues.append(animalValue)
}
//var attributesByName: [String : NSAttributeDescription] { get }
}
解决方法
您在评论中有一些非常有经验的人,询问您为什么需要这样做,并指出可能有更好的方法。但是,如果您确定确实需要执行此操作,则可以这样做。
返回排序的键,您实际上并不需要复制它们,因此您的第一个功能将如下所示。
export const lazyWithLatestFrom = <T extends Observable<unknown>[],V>(o: () => [...T]) =>
concatMap(value => of(value).pipe(withLatestFrom(...o()))) as OperatorFunction<
V,[V,...{ [i in keyof T]: TypeOfObservable<T[i]> }]
>;
然后将键传递到返回值的函数中,以按顺序生成值。
func generateAttributeList(_ animal:Animal) -> [String] {
let dictAttributes = animal.entity.attributesByName
return dictAttributes.keys.sorted()
}
或更简洁
func generateValueList (order: [String]) -> [String] {
var childValues = [String]()
for key in order {
let animalValue = animal!.value(forKey: key) as! String
childValues.append(animalValue)
}
return childValues
}