【问题标题】:Convert Array of Dictionaries into Array of Values from NSFetchRequest从 NSFetchRequest 将字典数组转换为值数组
【发布时间】:2017-12-04 19:18:10
【问题描述】:

我有一本使用fetchRequest.resultType = .dictionaryResultTypeNSFetchRequest 返回的字典,返回的字典是[Any],如下所示:

teams [{
    team = Canadiens;
}, {
    team = "Maple Leafs";
}, {
    team = Penguins;
}]

我只想要一个值数组,比如[Canadiens, "Maple Leafs", Penguins"],如何将字典数组转换为只包含值的数组?

全取

func teamNames(managedContext: NSManagedObjectContext) {
    //print("\(self) -> \(#function)")

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Players")

    fetchRequest.fetchBatchSize = 8
    fetchRequest.propertiesToGroupBy = [#keyPath(Players.team)]
    fetchRequest.propertiesToFetch   = [#keyPath(Players.team)]
    fetchRequest.resultType          = .dictionaryResultType

    do {

        let fetchTeamNamesDictionary = try managedContext.fetch(fetchRequest)
        print("fetchTeamNamesDictionary \(fetchTeamNamesDictionary)")


    } catch let error as NSError {

        print("GoFetch|teamNames: Could not fetch. \(error), \(error.userInfo)")
    }


}

替代接受的答案:

do {

    let fetchTeamNamesArray = try managedContext.fetch(fetchRequest)

    for array in fetchTeamNamesArray {

        let teamName = (array as AnyObject).value(forKey: "team") as! String

        teamNameArray.append(teamName)

    }

【问题讨论】:

    标签: arrays swift dictionary nsfetchrequest


    【解决方案1】:

    正如您清楚地知道结果的键和值是字符串将结果强制向下转换为[[String:String]]

    let teamArray = try managedContext.fetch(fetchRequest) as! [[String:String]]
    

    然后将字典映射到键 team 的值

    let teamNames = teamArray.map { $0["team"]! }
    

    【讨论】:

    • 我想出了另一个解决方案,但没有你的那么优雅。我知道我可以用 .map 做到这一点,但一直忘记我正在向下转换一个数组。
    • 如果您要使用键或索引订阅,则必须将Any 强制转换为更具体的内容。
    • 非常感谢您的快速回复。
    • 很抱歉,您的选择非常糟糕。永远不要使用valueForKey 从字典中获取值。在 Swift 中使用总是键订阅。而valueForKey——属于NSObject——需要丑陋的演员阵容到AnyObject。这非常objectivec-ish
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多