Swift Core Data组成为元组

时间:2016-03-11 23:14:53

标签: swift core-data tuples

我有一个像这样的核心数据表:

Core Data Table

如何在Swift中使用集合运算符的组合,以便fetch导致元组数组,其定义如下:

[(date: String, values: [Int])]?

例如,上表将产生:

Optional([("2/1/2016", [2, 3]), ("2/2/2016", [7])])

元组的第二部分是一个可变长度的数组......

1 个答案:

答案 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;
}

不确定是否有更有效的方法来执行此操作...