arrays - 键入任何?没有下标成员

标签 arrays swift dictionary any anyobject

我想从配置文件字典中获取地址,但出现错误“键入任何?没有下标成员”

var address:[[String : Any]] = [["Address": "someLocation", "City": "ABC","Zip" : 123],["Address": "someLocation", "City": "DEF","Zip" : 456]]
var profile:[String : Any] = ["Name": "Mir", "Age": 10, "Addresses": address]
profile["Addresses"][0]     <-----------------type any? has no subscript members

如何修复它并获取地址?非常感谢。

最佳答案

当您使用 "Addresses" 下标配置文件时,您将获得一个 Any 实例。您选择使用 Any 来适应同一数组中的各种类型,这导致了类型删除的发生。您需要将结果转换回其真实类型 [[String: Any]] 以便它知道 Any 实例代表一个 Array。然后你就可以下标了:

func f() {
    let address: [[String : Any]] = [["Address": "someLocation", "City": "ABC","Zip" : 123],["Address": "someLocation", "City": "DEF","Zip" : 456]]
    let profile: [String : Any] = ["Name": "Mir", "Age": 10, "Addresses": address]

    guard let addresses = profile["Addresses"] as? [[String: Any]] else {
        // Either profile["Addresses"] is nil, or it's not a [[String: Any]]
        // Handle error here
        return
    }

    print(addresses[0])
}

虽然这很笨重,而且一开始就不太适合使用字典。

在这种情况下,您的字典具有一组固定的键,结构是更合适的选择。它们是强类型的,因此您不必从 Any 进行向上和向下转换,它们具有更好的性能,并且更易于使用。试试这个:

struct Address {
    let address: String
    let city: String
    let zip: Int
}

struct Profile {
    let name: String
    let age: Int
    let addresses: [Address]
}

let addresses = [
    Address(
        address: "someLocation"
        city: "ABC"
        zip: 123
    ),
    Address(
        address: "someLocation"
        city: "DEF"
        zip: 456
    ),
]

let profile = Profile(name: "Mir", age: 10, addresses: addresses)

print(profile.addresses[0]) //much cleaner/easier!

关于arrays - 键入任何?没有下标成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956785/

相关文章:

java - 如何从字符串数组创建词汇表

arrays - R 数组分配中的内存使用情况

PHP - 检查数组的所有元素是否都在字符串中

ios - 在 MFMessageComposeViewController 上设置 NavigationBar 背景颜色

swift - 确定文本字段是否有焦点

ios - 如何实现具有通用约束类型属性的 Swift 协议(protocol)?

python - 使用 zip()、map() 函数和 itertools 对 list 中的列表元素求和

c++ - 避免数组订阅运算符中的悬空引用

python - 将字典 append 到循环中的列表

javascript - 在 Ionic Framework Google map 中获取路线