如何在可编码类型中使用 Any

2023-12-11

我目前正在与Codable输入我的项目并面临问题。

struct Person: Codable
{
    var id: Any
}

id上面的代码可以是String or an Int。这就是原因id属于类型Any.

我知道Any is not Codable.

我需要知道的是如何让它发挥作用。


量子价值

首先,您可以定义一个可以从String and Int价值。 这里是。

enum QuantumValue: Decodable {
    
    case int(Int), string(String)
    
    init(from decoder: Decoder) throws {
        if let int = try? decoder.singleValueContainer().decode(Int.self) {
            self = .int(int)
            return
        }
        
        if let string = try? decoder.singleValueContainer().decode(String.self) {
            self = .string(string)
            return
        }
        
        throw QuantumError.missingValue
    }
    
    enum QuantumError:Error {
        case missingValue
    }
}

Person

现在你可以像这样定义你的结构

struct Person: Decodable {
    let id: QuantumValue
}

就是这样。我们来测试一下吧!

JSON 1: id is String

let data = """
{
"id": "123"
}
""".data(using: String.Encoding.utf8)!

if let person = try? JSONDecoder().decode(Person.self, from: data) {
    print(person)
}

JSON 2: id is Int

let data = """
{
"id": 123
}
""".data(using: String.Encoding.utf8)!

if let person = try? JSONDecoder().decode(Person.self, from: data) {
    print(person)
}

更新 1 比较值

这个新段落应该回答评论中的问题。

如果您想将量子值与Int您必须记住,量子值可能包含Int or a String.

所以问题是:比较 a 意味着什么?String and an Int?

如果您只是在寻找一种将量子值转换为Int那么你可以简单地添加这个扩展

extension QuantumValue {
    
    var intValue: Int? {
        switch self {
        case .int(let value): return value
        case .string(let value): return Int(value)
        }
    }
}

现在你可以写

let quantumValue: QuantumValue: ...
quantumValue.intValue == 123

UPDATE 2

这部分是为了回答评论者留下的评论@Abrcd18.

您可以将此计算属性添加到Person struct.

var idAsString: String {
    switch id {
    case .string(let string): return string
    case .int(let int): return String(int)
    }
}

现在要填充标签只需写

label.text = person.idAsString

希望能帮助到你。

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

如何在可编码类型中使用 Any 的相关文章

  • NSIndexpath.item 与 NSIndexpath.row

    有谁知道之间的区别NSIndexpath row and NSIndexpath item 具体来说 我在以下情况中使用哪一个 UITableViewCell tableView UITableView tableView cellForR
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • 如何使用群组在 iPhone 和 Apple Watch 之间共享数据?

    我是 Watchkit 开发新手 无法找到在 iPhone 和 iWatch 之间共享数据的解决方案 请帮助我 我希望使用组来共享数据 我们可以使用组在 iPhone 和 iWatch 之间传递数据 基本上iWatch不能做任何处理 我们需
  • 在 UITableViewCell 内动态更改标签宽度

    我正在尝试建立一个自定义表格视图 正如您在图片中看到的 我在故事板一侧将标签的宽度默认设置为 160 磅 并在加载表格时动态更改宽度 我通过修改 cellForRowAtIndexPath 委托方法来实现此目的 因此 根据日期的长度 我设置
  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 如何在 Swift 中使用 deltaTime 正确计算 1 秒

    我正在尝试计算经过的秒数deltaTime但我不知道该怎么做 因为我的deltaTime不断打印 0 0166 或 0 0167 这是我的代码 override func update currentTime CFTimeInterval
  • 如何在 iPad 应用程序上禁用横向方向?

    我创建了一个全新的单视图 iOS 通用 Swift 应用程序 然后 我在应用程序设置中取消选中 横向左 和 横向右 我在 iPhone 上运行了它 万岁 无论我如何旋转手机 它都会保持纵向模式 然后我在 iPad 上运行它 它会旋转到任何内
  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • 如何在 iOS 应用程序中检测所有可用的 Wifi 网络并连接到其中之一

    在我的 iOS 应用程序中 我想检测所有可用的 wifi 网络 然后从列表中选择一个网络并连接到它 目标是不打开应用程序内置的设置来连接 Wi Fi 而是在我的应用程序中完成这一切 首先 这可能吗 如果可能的话 请指出要使用哪些框架和方法
  • 带有图像的 UITableView 滚动非常慢[重复]

    这个问题在这里已经有答案了 可能的重复 带图像的表格视图 加载和滚动缓慢 https stackoverflow com questions 4071497 table view with images slow load and scro
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • 使用 UIWebView 显示 PDF 不起作用

    因此 我意识到有关使用 UIWebView 在应用程序 在 iPad 上 中显示 PDF 存在很多问题 我已经审查了我能找到的所有内容 但似乎找不到任何满意的东西 我想做的事情非常基本 所以我真的不知道为什么它不起作用 我需要做的就是在 U
  • UNTimeIntervalNotificationTrigger nextTriggerDate() 是否给出了错误的日期?

    我正在更新本地通知以与 iOS 10 配合使用 但遇到了一个问题 我认为 nextTrigger 函数返回的不是 满足触发条件的下一个日期 而是返回当前日期时间加上您最初设置 UNTimeInvervalNotificationTrigge
  • 如何使用固定宽度和自动布局正确缩放图像?

    我有一个动态 UIImage 和一个固定宽度为 280 0px 的 UIImageView 并且我正在使用自动布局 在 UIImage 视图上 我设置了宽度和高度约束 并降低了高度约束的优先级 我选择了 aspect fit 并将内容拥抱和
  • 如何在没有 MFMessageComposeViewController 的情况下发送和接收短信?

    我想发送和接收短信而不显示MFMessageViewController从我的申请中 有人能告诉我这怎么可能吗 不可能 除非您使用第 3 方 api 发送 接收短信
  • 使用自定义格式将字符串转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 到 NSDate https stackoverflow com questions 1353081 nsstring to nsdate iPhone 如何将 yyyyMMddTh
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat
  • iOS 11 特定设置部分的 URL 方案停止工作

    我的应用程序使用 URL 方案将用户直接带到 设置 常规 关于 部分 以下 URL 在 10 3 x 中工作正常 应用程序首选项 根 常规 路径 关于 然而 这个 URL 方案在 iOS 11 GM 版本中不再有效 它仅启动 设置 应用程序
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • 组菜单项可以工作,但不显示复选标记

    我有一个带有溢出菜单的工作应用程序 菜单中的所有代码都有效 但在我单击可单击的分组菜单项后 没有显示复选标记 我是否在做一些根本性错误的事情 我认为 Android 系统会自动显示复选标记 并且系统会为我执行此操作 Android知道它是在
  • 如何指示两种 Coq 电感类型尺寸的减小

    我正在尝试定义game组合游戏的归纳型 我想要一个比较方法来判断两个游戏是否相同lessOrEq greatOrEq lessOrConf or greatOrConf 然后我可以检查两个游戏是否相等 如果它们都是 lessOrEq and
  • 为什么 SwiftUI Image 添加额外的填充来封闭 VStack?

    我正在努力解决一个非常简单的问题 如果我将一个文本放入 VStack 则顶部没有填充 如果我现在放置一个图像 我就会有一个填充 请看下面的截图 对应的代码是 struct NewView View var body some View VS
  • 不进行舍入的十进制格式.net

    昨天我问了这个一般性问题关于小数及其内部精度 这是一个关于我试图解决的场景的具体问题 我在 Sql Server 中有一个列 输入为十进制 18 6 当我获取这些值时 创建的 net 小数与数据库中的精度匹配 它们看起来像这样 1 1000
  • VB.Net 替换不起作用?

    不确定我是否做错了什么 基本上我的代码从 111111111 开始 并通过每次线程能够时将 1 添加到原始数字来进行计数 我希望该方法跳过序列中的 0 而不是在 111111119 之后转到 111111120 我希望它直接转到 11111
  • 如何就地对文件进行排序?

    当我们使用sort file命令 该文件以排序的方式显示其内容 如果我不想在标准输出上获得任何输出 而是想在输入文件中获得任何输出 该怎么办 您可以使用 o output FILEsort 选项指示相同的输入和输出文件 sort o fil
  • 将对象数据字段复制到子类实例中

    我有两个类 TNode 和 TMaster 我从 TNode 继承了 TMaster 目标是创建一个 TMaster 实例 其中包含先前创建的 TNode 实例的所有数据 是否有任何 内置 方法可以实现此目的 或者应该手动完成 type T
  • 计算向量中相同字符串的更简单方法?

    我正在尝试获取向量中所有相同字符串的数量的输出 作为更大程序的一部分 经过大量研究后 我设法将一些有用的东西组合在一起 但看起来很混乱 我想知道是否有更好的方法来做到这一点 include
  • 在多行数据中提取记事本++中2个特定单词之间的字符串/数据

    All 我一直在尝试使用正则表达式搜索和替换在 Notepad 中提取 2 个特定单词之间的文本 但没有运气 它给了我找到的最后一个匹配项 我尝试搜索 Stack Overflow 并回答了几个问题 但没有运气 我的数据是 Open opt
  • FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1

    我正在 Android 上制作一个聊天应用程序 它使用 google firebase 来存储用户互相写入的消息 为了向用户显示这些消息 我从数据库中读取它们 并使用 ListAdapter 将它们组织到自定义 ListView 中 在我将
  • 如何在Jcreator中调试? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我使用的是 JCreator 版本 5 0 0 10 而且我不知道如何调试程序 能否请您
  • 根据文本内容查找html元素

    我有一个像这样的html代码 div span TV span div 我想找到这个span通过具有文本 TV 的 documentObject 例如getElementById等等 类似的东西getElementByText 我知道可以通
  • 在 C# 中指定范围

    我有 6 个范围 1000000 5000000 50000001 10000000 10000001 25000000 25000001 50000000 50000001 75000000 75000001 100000000 现在我该
  • h5py 将虚拟数据集读取到 NumPy 数组时出错

    我正在尝试从使用 h5py 创建的虚拟 HDF 数据集加载数据 但在正确加载数据时遇到一些问题 这是我的问题的一个例子 import h5py import tools as ut virtual h5py File ut params p
  • C# 泛型方法和动态类型问题[重复]

    这个问题在这里已经有答案了 我有一个通用方法声明如下 public void Duplicate
  • SurfaceView 和 ImageView 的区别

    我想知道SurfaceView和ImageView有什么区别以及它们的使用场景 两者似乎都是一样的 如果有我可能错过的正确链接 请指导我 表面视图的一些优点和差异 更好的渲染机制 线程可以在不使用处理程序的情况下更新表面的内容 这有助于提高
  • Angular 中的子父母沟通最佳实践

    我正在努力提高 Angular 的水平 并且想了解儿童与家长之间沟通的最佳实践 我当前想要使用的应用程序是 Angular 6 我知道我可以使用 ViewChild Output 或创建服务在子父组件之间进行通信 还有其他方式进行沟通吗 如
  • 无法让OkHttp的response.body.toString()返回字符串

    我正在尝试使用 OkHttp 获取一些 json 数据 但当我尝试记录时无法弄清楚为什么response body toString 我得到的是Results com squareup okhttp Call RealResponseBod
  • 在最新的 MapBox SDK 6.7 中旋转和更改标记的位置

    Mapbox Android SDK 6 7 0 我们正在开发的应用程序的要求是 我们必须在不同的 LatLng 位置添加多个标记 并使用一些方位旋转它们 在旧的mapbox版本 4 2 1 中 我们可以毫无问题地做到这一点 Working
  • 如何在可编码类型中使用 Any

    我目前正在与Codable输入我的项目并面临问题 struct Person Codable var id Any id上面的代码可以是String or an Int 这就是原因id属于类型Any 我知道Any is not Codabl