我有一个像这样的核心数据表:
如何在Swift中使用集合运算符的组合,以便fetch导致元组数组,其定义如下:
[(date: String, values: [Int])]?
例如,上表将产生:
Optional([("2/1/2016", [2, 3]), ("2/2/2016", [7])])
元组的第二部分是一个可变长度的数组......
答案 0 :(得分:0)
这是我如何做到的,没有集合(似乎没有使用集合运算符的快捷方式);基本上它只是一个嵌套的提取请求:
func dailyitems() -> [(date: String, items: [Item])]?
{
let request = NSFetchRequest(entityName: ItemEntity);
request.returnsDistinctResults = true;
request.resultType = NSFetchRequestResultType.DictionaryResultType;
request.propertiesToFetch = NSArray(object: "date_string") as [AnyObject];
var array_tuples : [(date: String, items: [Item])]?;
var daily_items : [Item] = []
do
{
let distinctResults: NSArray? = try context.executeFetchRequest(request);
if(distinctResults == nil || distinctResults!.count < 1)
{
return nil;
}
array_tuples = [];
for date in distinctResults!
{
let Itemrequest = NSFetchRequest(entityName: ItemEntity);
Itemrequest.predicate = NSPredicate(format: "date_string == %@", date.valueForKey("date_string") as! String);
do
{
let dayitems = try context.executeFetchRequest(Itemrequest) as? [NSManagedObject];
if(dayitems != nil && dayitems?.count > 0)
{
daily_items = [];
for dayItem in dayitems!
{
daily_items.append(
Item(
item: dayItem.valueForKey("item") as! String,
date: dayItem.valueForKey("date_string") as! String,
value: dayItem.valueForKey("value") as! Int,
)
);
}
array_tuples?.append((date: date.valueForKey("date_string") as! String, items: daily_items));
}
}
catch
{
return nil;
}
}
}
catch
{
return nil;
}
return array_tuples;
}
不确定是否有更有效的方法来执行此操作...