键入任何?没有下标成员

2023-12-30

我想从个人资料字典中获取地址,但收到错误“键入任何?没有下标成员”

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!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

键入任何?没有下标成员 的相关文章

随机推荐

  • java TreeSet:比较和相等

    我想要使 用属性 sort 1 排序的对象列表 但是当我想删除时 我希望它使用属性 id 下面的代码代表了这个问题 package javaapplication1 import java util TreeSet public class
  • Java 中有有序集的实现吗?

    如果有人熟悉 Objective C 有一个名为的集合NSOrderedSet https developer apple com library ios documentation Foundation Reference NSOrder
  • 在 xargs 变量上使用 sed 在 shell 扩展内不起作用

    我正在尝试在 Redis 中进行批量密钥重命名 使用 shell 来替换每个密钥名称 在redis内部似乎没有更好的方法来做到这一点 redis cli n 5 KEYS staging xargs I echo RENAME echo s
  • 在哪里可以找到 WSDL.exe?

    我有 Visual Studio 2010 Ulitmate 带有 MSDN Premium 但我似乎找不到这个文件 我尝试安装 Visual Studio SDK 但似乎找不到该文件 我看过 C Windows Microsoft NET
  • 本地主机在 Chrome 中无法工作,127.0.0.1 可以工作

    我正在尝试运行本地节点服务器 但出于某种原因localhost 3000不起作用 错误页面指出This webpage is not available ERR CONNECTION CLOSED然而 127 0 0 1 3000确实有效
  • opencv中图像的二值化

    我在图像二值化方面遇到问题 通常可能模糊 我有这个图像 完成二值化后我得到 我怎样才能更好地进行二值化 我的目标是只有黑色背景和白色字母 没有其他东西 我使用了自适应阈值二值化 cv2 adaptiveThreshold image gs
  • 如何在 ASP.NET C# 中从 Mailgun 接收 HTTP POST?

    http documentation mailgun net quickstart html http documentation mailgun net quickstart html包含 Django 中 http 处理程序的一些示例代
  • 打开deploy.prototxt时出现运行时错误

    我正在尝试使用 caffe 运行一个应该打开的简单代码deploy prototxt但它无法打开文件并引发此错误 RuntimeError Could not open file home ebadawy git caffemodels b
  • XSD 和多态性

    我有点重复这个问题第一次被错误地问到 我有这个
  • 使用一个 NetStream 对象同时传输两个 Video 对象

    我试图将单个 NetStream 对象附加到两个单独的视频对象 而不是从服务器拉出冗余流 预期的行为是两个视频显示相同的内容 但是 我附加 NetStream 的最后一个视频似乎是唯一会显示内容的视频 还有其他人遇到过这个吗 如果不需要 我
  • 白色背景的错误屏幕

    当 iOS 上的 React Native 出现异常时 我会看到带有白色背景的错误屏幕 您可以通过点击的单元格看到它实际上具有异常堆栈 只是具有白色背景 不知道为什么会发生这种情况 但是有办法解决吗 在 Android 上 屏幕有红色背景
  • 如何访问 TTestSetup 类中 TTestCase 的字段

    我正在使用 DUnit 创建单元测试 我有一个类需要很长时间才能初始化 我从 TTestSetup 派生一个类 TMyTestSetup 并重写其 Setup 方法 对于我的 TTestCase 中的所有测试 仅调用此 SetUp 方法一次
  • 无法连接到 Dockerfile 中的 Wildfly

    我正在创建一个自定义 Dockerfile 其中包含官方 keycloak docker 映像的扩展 我想更改网络上下文并添加一些自定义提供程序 这是我的 Dockerfile FROM jboss keycloak 7 0 0 COPY
  • 屏幕截图不提供整个屏幕的图像

    我正在制作与图像相关的应用程序 我的屏幕上有多个图像 我已经拍了屏幕截图 但它不应该提供我的整个屏幕 最顶部和最底部的一小部分不需要在其中显示 我的顶部有导航栏 底部还有一些按钮 我不想在屏幕截图中捕获该按钮和导航栏 下面是我的屏幕截图代码
  • 正交相机并通过光线投射选择对象

    我在使用光线投射器使用正交相机选择对象时遇到了一些困难 不过 当我使用透视相机时 我没有任何问题 在两者之间切换时 我唯一要改变的是相机类型 我可以在正交视图上选择面 但它仅与我在屏幕上单击的位置松散相关 当我可以在远离物体的地方点击时 它
  • 使用Android绘制自定义视图

    我正在我的应用程序中绘制一个自定义视图 该视图基本上将参数 XML 作为要显示的文本 然后继续无限旋转它 当我进行这个控制时 我有一些疑问我想问 我已经制作了 2 个样式属性 我已在attrs xml文件 这些属性是设置我的控件中使用的圆的
  • 核心数据 - 货币小数类型

    我在最近的一篇文章中读到 十进制数据类型是核心数据中用于货币建模的最佳选择 因为它不存在浮点问题 我搜索了苹果文档和谷歌 似乎找不到任何有关使用 Decimal 类型的文档 有人有相关文档的链接吗 Thanks 使用 Decimal 作为数
  • 如何让我的java程序在GPU上运行?如何更改我的程序可以加速?[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我写了一个由几个类组成的程序 但是计算速度太慢 粗体的程序 我希望让我的java程序在GPU上运行以加快计算速度 或者有其他方法来加快
  • Flutter延迟一段时间后如何运行代码?

    我想在构建小部件后经过一定的延迟后执行一个函数 在 Flutter 中执行此操作的惯用方法是什么 我想要实现的目标 我想从默认开始FlutterLogoWidget 然后更改其style一段时间后的财产 您可以使用Future delaye
  • 键入任何?没有下标成员

    我想从个人资料字典中获取地址 但收到错误 键入任何 没有下标成员 var address String Any Address someLocation City ABC Zip 123 Address someLocation City