【发布时间】:2017-11-27 07:05:40
【问题描述】:
我需要使用 CoreData 从表中获取一些统计信息。我使用this 手册使用“分组依据”表达式提取数据。
这是我的源代码:
var popularGuestNames: [String] = []
let keypathExp = NSExpression(forKeyPath: "guestName")
let expression = NSExpression(forFunction: "count:", arguments: [keypathExp])
let countDesc = NSExpressionDescription()
countDesc.expression = expression
countDesc.name = "count"
countDesc.expressionResultType = .integer64AttributeType
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "GuestsTable")
request.returnsObjectsAsFaults = false
request.propertiesToGroupBy = ["guestName"]
request.propertiesToFetch = ["guestName", countDesc]
request.resultType = .dictionaryResultType
let matchedGuests = try? context.fetch(request)
guard matchedGuests != nil else {return popularGuestNames}
但结果我得到了类型为 [Any] 的匹配客人。我被困在这里。我可以使用 print 看到有 JSON 对象:
Optional(
[{
count = 1;
guestName = "\U0412\U0430\U043d\U044f";
}, {
count = 13;
guestName = "\U0413\U043e\U0441\U0442\U044c 1";
}, {
count = 9;
guestName = "\U0413\U043e\U0441\U0442\U044c 2";
}, {
count = 3;
guestName = "\U0413\U043e\U0441\U0442\U044c 3";
}, {
count = 1;
guestName = "\U0413\U043e\U0441\U0442\U044c 4";
}, {
count = 1;
guestName = "\U0413\U043e\U0441\U0442\U044c 5";
}, {
count = 1;
guestName = "\U041d\U043d\U043d";
}, {
count = 1;
guestName = "\U0422\U0435\U0441\U0442";
}, {
count = 1;
guestName = "\U0422\U0435\U0441\U0442 \U0442\U0435\U0441\U0442\U043e\U0432\U0438\U0447";
}, {
count = 1;
guestName = "\U0423\U0410\U0443\U043f\U0430\U0438\U0443\U0430\U0433\U0443";
}])
但我找不到解析它的方法。我知道我应该使用 JSONSerialization.jsonObject,但是这种方法需要数据类型的输入变量。而且我无法理解如何将 Any 转换为 Data。
【问题讨论】:
-
matchedGuests是一个字典数组:[[String:Any]]。Any是键guestName的字符串,我猜是Int键count -
正如我从编辑器看到的:让matchedGuests:[Any]? .如何使用它?