当前位置: 首页 > 面试题库 >

输入任何?没有下标成员

朱炳
2023-03-14
问题内容

我想从个人资料字典中获取地址,但出现错误“输入任何类型?没有下标成员”

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])
}

但是,这非常笨拙,并且一开始就使用Dictionary并不是一个非常合适的情况。

在这种情况下,如果词典中有一组固定的键,则结构是更合适的选择。它们的类型很严格,因此您不必从上或下进行转换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!


 类似资料:
  • 问题内容: 我查看了以前的文章,但似乎找不到解决此问题的方法。所有三行代码都给出“类型’Any’没有下标成员”错误。对此还很陌生,因此不胜感激。 问题答案: 的类型为。下标是一种特殊的函数,它使用将值括在大括号中的语法。此下标功能由实现。 因此,这里发生的是,作为开发人员的YOU知道这是一个,但是编译器却没有。它不会让您调用该函数,因为您试图在type的值上调用它并且未实现。为此,您必须告诉编译器

  • 问题内容: 我收到此错误:尝试运行此代码块时,“类型’Any’没有下标成员”: 我一直在寻找答案,但找不到用FireBase解决此问题的答案。我该如何解决这个错误? 问题答案: 具有类型,因此您需要将其强制转换为基础类型,然后才能对其进行下标。由于is ,请使用可选的强制类型转换来建立类型,然后您可以访问字典中的值: 或者,您也可以单线执行此操作:

  • 问题内容: 我的图形请求不断出现此错误? 输入“是吗?” 没有下标成员 错误指向结果…。这仅在我转换为Swift 3时发生了…有人吗???? 问题答案: 试试这个

  • 问题内容: 我知道,这个特定的错误已经在各处发布,并且代码有些基本,但是我自己仍然无法弄清楚这个错误,我需要建议。 问题是当我添加parse.com上提供的前两行代码以保存对象时 第二行出现以下错误: “ PFObject”没有名为“下标”的成员 我正在使用Xcode 6.3 beta2。所有必需的库都与通过BridgeHeader导入的二进制文件链接。 我应该使用什么语法? 问题答案: 发生这种

  • 问题内容: 我正在使用Swift 3和Alamofire 4.0。我可以打印出整个响应,但无法遍历和打印出每个值。当我尝试在下面打印“标题”时,出现“ NSFastEnumerationIterator.Element”类型(又名“ Any”)没有下标成员的情况。我们非常感谢您的帮助。 问题答案: 只需使用本机Swift 。除非绝对没有选择,否则请 始终 使用Swift本机类型。缺少类型信息,因此

  • 问题内容: 这是我在Swift中的代码: 我刚刚更新到Xcode 8 / Swift 3,这似乎引起了以下错误消息: “类型’Any’没有下标成员” 我在代码中的许多地方调用插入某些内容,但出现此错误,并且我无法运行代码。 以下代码有效: 但是,与以前相比,现在看不到发生了什么变化或什么使它成为必需。 据我所知,唯一改变的是观察的语法,但是我不明白为什么这会导致我的代码停止工作。 问题答案: 在F