gpt4 book ai didi

arrays - type 'any' has no subscript members error with map

转载 作者:搜寻专家 更新时间:2023-11-01 07:19:57 26 4
gpt4 key购买 nike

我尝试了几个小时的每一种可能的组合,但无法让它发挥作用。

我的功能:

func allItems() -> [TodoItem] {
let todoDictionary = UserDefaults.standard.dictionary(forKey: ITEMS_KEY) ?? [:]
let items = Array(todoDictionary.values)

return items.map({TodoItem(
deadline: $0["deadline"] as! Date,
title: $0["title"] as! String,
UUID: $0["UUID"] as! String!,
description: $0["description"] as! String,
imageSavePath: ($0["imageSavePath"] as! String),
isItComplete: $0["isItComplete"] as! Bool
)}).sorted(by: {(left: TodoItem, right:TodoItem) -> Bool in
(left.deadline.compare(right.deadline) == .orderedAscending)
})
}

给我错误“type 'Any' has no subscript members”。我已经研究并试图改变:

func allItems() -> [TodoItem]

func allItems() -> [Any:[TodoItem]]

然而,这会引发“Type Any 不符合 Hashable 协议(protocol)”的错误。这是正确的路线吗?

请帮忙......在我的 macbook 出窗之前!

最佳答案

注意变量的类型。

dictionary(forKey:)返回 [String: Any] , 所以 todoDictionary[String: Any] .

(在旧的 Swift 中,泛型字典的值类型被导入为 AnyObject ,但现在是 Any 。)

您只检索值并将其放入数组,所以 items是一个 Array<Any> .

那你申请的是mapitems , 所以 $0其中是一个 Any .

因此,您不能将包括下标在内的任何方法应用于Any。 .


如需申请$0["deadline"]或某些东西,值可能不同,$0 的类型需要是其键类型为 String 的字典和它的Value类型混合,用Any表示在 Swift 3 中。

类型$0需要是 [String: Any] , 所以 items 的类型需要是 Array<[String: Any]> (又名 [[String: Any]])。

表示todoDictionary的值类型需要是 [String: Any] , 它的 Key 类型已经被限制为 String , 所以 todoDictionary 的类型需要是 [String: [String: Any]] .


结论,改变你的第一行allItems()对此:

let todoDictionary = UserDefaults.standard.dictionary(forKey: ITEMS_KEY) as? [String: [String: Any]] ?? [:]

关于arrays - type 'any' has no subscript members error with map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com