Xcode 警告:不可变属性不会被解码,因为它是用无法覆盖的初始值声明的

2024-01-02

运行 Xcode 12,我的 Swift 5 Xcode 项目现在每当Decodable or Codable类型声明一个let具有初始值的常数。

struct ExampleItem: Decodable {
    let number: Int = 42 // warning
}

不可变属性不会被解码,因为它是用不能被覆盖的初始值声明的

Xcode 建议更改let to a var:

修复:改为使属性可变

    var number: Int = 42

它还建议修复:

修复:通过初始化程序设置初始值或显式定义包含“标题”大小写的 CodingKeys 枚举以消除此警告

这个新警告的目的是什么?是应该重视,还是忽视?这种类型的警告可以吗silenced https://stackoverflow.com/questions/31540446/how-to-silence-a-warning-in-swift?

Xcode 的修复是否应该实施?或者有更好的解决方案吗?


诺亚的解释是正确的。这是错误的常见来源,并且由于可编码合成的“神奇”行为,发生的情况并不是立即显而易见的,这就是为什么我添加了这个警告 https://github.com/apple/swift/pull/30218给编译器,因为它让您注意到该属性不会被解码,并让您明确地调用它(如果这是预期的行为)。

正如修复程序所解释的那样,如果您想消除此警告,您有多种选择 - 您选择哪一个取决于您想要的具体行为:


  1. 通过一个传递初始值init:
struct ExampleItem: Decodable {
  let number: Int
    
  init(number: Int = 42) {
    self.number = number
  }
}

这将允许number被解码,但你也可以传递实例ExampleItem其中使用默认值。

也可以直接在里面使用init相反,在解码期间:

struct ExampleItem: Decodable {
  let number: Int
    
  private enum CodingKeys: String, CodingKey {
    case number
  }
    
  init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    number = try container.decodeIfPresent(Int.self, forKey: .number) ?? 42
  }
}

这将允许number要解码,但使用42如果解码失败则作为默认值。


  1. 使该物业成为var,尽管您也可以将其设为private(set) var:
struct ExampleItem: Decodable {
  var number: Int = 42
}

使其成为var会允许number被解码,但它也将允许调用者修改它。通过将其标记为private(set) var相反,如果您愿意,您可以禁止此操作。


  1. 定义一个显式的CodingKeys enum:
struct ExampleItem: Decodable {
  let number: Int = 42
  
  private enum CodingKeys: CodingKey {}
}

这将防止number免遭解码。由于枚举没有大小写,这可以让编译器清楚地知道没有要解码的属性。

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

Xcode 警告:不可变属性不会被解码,因为它是用无法覆盖的初始值声明的 的相关文章

  • 如何从 URL 流式传输音频而不在设备上下载 mp3 文件

    如何在 Swift 中从 URL 流式传输音频而不在设备上下载 mp3 文件 我需要导入什么 我需要某些库吗 添加任何内容到 info plist 中吗 请评论你的代码 您可以使用 iOS AVPLayer 从 url 传输音频 var p
  • UITextField 清除按钮不显示

    I want to show a clear button always in a UITextField I have tried to both set this in xib Interface Builder and in code
  • MapKit 是否支持街景?

    我可以在我的应用程序中使用 Google 地图街景吗 No 填充字符以克服有问题的最小值
  • 如何使用 swift 从 core-grapics API 获取窗口列表

    我正在尝试使用 Swift 从核心图形 API 获取 OSX 上的窗口列表 以便稍后捕获它们的图像 经过一番研究 我发现 CGWindowListCopyWindowInfo Objective C API 调用具有以下签名 CFArray
  • iOS 模拟器无法正确刷新

    我尝试模拟一个在 Xcode 9 中创建的非常非常简单的应用程序 我尝试在装有 iOS 11 2 的 iPhone6 的 iOS 模拟器中模拟它 我还测试了其他设备 结果相同 在真实设备上 该应用程序可以按预期运行 但在模拟器上却没有 我希
  • 如何在 iOS 中使用 AVPlayer 缓冲音频?

    我想播放来自互联网的流音频 我编写了播放流的代码 但它没有任何缓冲区 因此如果信号较弱 应用程序将停止播放音频 这是我的代码 import UIKit import AVFoundation import MediaPlayer impor
  • iOS Flutter 与 Firebase:启动时 FlutterAppDelegate 中出现白屏和 SIGABRT

    现在在多个项目中 非常不一致的是 我在启动应用程序时出现白屏 并且 Xcode 显示错误 Thread 1 signal SIGABRT 在线上 objc class AppDelegate FlutterAppDelegate 这些都是i
  • Xcode 不再识别测试

    我已经解决这个问题几天了 但我没有任何想法 我在 Xcode 中使用单元测试 效果很好 突然 Xcode 不再识别我的测试 如果我进入测试面板 它会显示我的测试为零 我其实有13个 运行单独测试或某些课程的能力现已消失 它不会在编辑器区域的
  • 故事板中的 Xcode 6 UIVisualEffectView

    我正在 Xcode 6 中的对象库中查找 UIVisualEffectView 以在 Storyboard 中添加模糊效果 我知道如何以编程方式执行此操作 但我找不到在故事板中执行此操作的方法 这在当前的测试版中是否不可用 或者有没有一种不
  • 使用 AlamofireImage 下载图像有进度吗?

    有没有办法使用 AlamofireImage 下载图像并获得有关下载进度的某种反馈 同时利用它的强大功能UIImage 扩展 图像过滤器和图像缓存 我知道我可以退回到平原Alamofire request responseImage但我想让
  • 是否可以从 NSFetchedResultsController 获取最新快照

    从 iOS 13 开始 保持UITableView与一个同步NSFetchedResultsController好像是有快照的 每当 ManagedObjectContext 报告添加 删除或更新时 NSFetchedResultsCont
  • Xcode 中的“使用不间断空格 (U+00A0) 代替常规空格”警告

    When typing a space character in Xcode a warning appears sometimes 使用不间断空格 U 00A0 代替常规空格 早期的 Xcode 版本显示以下消息 将 Unicode 字符
  • 前置条件失败:从 iOS 13.4 开始,在 SwiftUI 中使用 GeometryReader 时输入索引无效

    昨天 我将 XCode 和我的项目升级到 iOS 13 4 我开始在使用 GeometryReaders 的视图周围看到很多失败 除了 前提条件失败 输入索引无效 之外 该错误没有显示任何内容 升级到 13 4 1 后我遇到了完全相同的问题
  • “GTLDriveFile”类型的值没有成员“downloadUrl”

    我正在关注这个tutorial https developers google com drive ios devguide files我正在尝试用 Swift 来做这件事 The file对象没有downloadUrl财产 我不明白为什么
  • 故事板入口点缺失

    在 xcode 7 2 中 对象列表中没有 Storyboard Entry Point 项 我需要使用 Storyboard Entry Point 我通过谷歌搜索找不到任何类似的问题 所以任何人都可以在这里帮助我 单击要作为情节提要入口
  • 如何使用延迟位置 iOS 6?

    我正在尝试使用新的 iOS 6 延迟位置更新功能 但不断收到此错误 didFinishDeferredUpdatesWithError Error Domain kCLErrorDomain Code 11 操作无法完成 kCLErrorD
  • 如何处理 iPhone 4s、5 和 6 屏幕尺寸,并使所有内容在所有设备上看起来相同

    我正在使用 Xcode 6 1 并且在我拥有的视图之一中包含许多标签 然而 这些标签在不同的设备中看起来不同 尽管我已经对所有标签添加了约束 但仍然面临同样的问题 如何在所有设备上获得相同的视图布局 如何使每个标签的宽度和高度灵活 取决于屏
  • AFNetworking 无法编译

    我完全无法尝试使用 AFNetworking 在模拟器上运行项目 我之前在其他项目中使用过这种依赖关系 所以我不明白这里出了什么问题 首先 我尝试运行项目时出现错误 Undefined symbols for architecture x8
  • 如何正确设置 UIBezierPath 的动画以产生水/波浪效果?

    我正在尝试做一个UIBezierPath像波浪或水一样动画 类似于这样的事情 https dribbble com shots 3994990 Waves Loading Animation https dribbble com shots
  • Xcode:一步完成清理和构建

    在 Xcode 中 您可以从 产品 菜单执行 清理 您还可以进行构建 也可以从产品菜单中进行 但是 你能将两者结合起来吗 即是否可以一步完成 清理 然后 构建 None

随机推荐

  • 如何使用反射获得泛型类型的正确文本定义?

    我正在研究代码生成 并遇到了泛型的障碍 这是导致我出现问题的 简化 版本 Dictionary
  • 在网络浏览器中打开 R Shiny 应用程序时,传单多边形会失去颜色

    我正在使用 R 中的传单构建地图 将其部署为 Shiny 应用程序 Shiny 应用程序在 RStudio 中运行良好 但是当我在网络浏览器中打开它时 多边形失去了颜色 其他一切都很好 底图在那里 多边形都在那里 您可以将鼠标悬停在多边形上
  • Ipython笔记本缓存问题

    在 ipython 笔记本中 我调用从我自己的模块导入的函数并运行一些代码 我注意到 如果我更改函数中的代码 在笔记本之外 并执行笔记本 则旧版本的函数将运行 当我记得时 ipython笔记本或firefox似乎正在缓存我可以用ctrl F
  • Python Byte 不打印二进制

    当我在 Python 中打印这样的程序时 x b francis 输出是b francis 如果字节在0 s and 1为什么它不打印出来 你似乎从根本上感到困惑 以一种非常常见的方式 数据本身是一个不同的概念表示 即当您尝试时所看到的pr
  • 页面滚动结束时的 jQuery 回调

    我有一个 div 标签 在 css 中设置为 overflow scroll 我有一个回调 应该在使用它找到的元素的滚动末尾调用 details scroll function if this height this get 0 scrol
  • 未找到 Android 方面,使用 Android Studio 0.2 进行编译时出现问题

    因此 遵循这篇 SO 帖子的建议 抱歉 我会在那里发表评论 希望我没有足够的声誉 Gradle 失败 无法确定要执行哪些任务 https stackoverflow com questions 17614477 gradle failure
  • vc++编译错误RC:致命错误RC1107:无效用法;使用RC /?为了

    我在构建 vc 项目时遇到以下错误 使用 Visual Studio 2010 RC 致命错误 RC1107 无效使用 使用RC 为了 我知道构建资源时存在一些问题 但如何获得确切的问题区域 Thanks 解决方案 在最后一个包含路径中添加
  • 简单的旋转悬停效果不起作用

    我正在尝试创建一个简单的效果 以便当我将鼠标悬停在最内圈时 两个外环旋转以创建很酷的效果 我认为这将是一项简单的任务 但我似乎无法弄清楚我做错了什么 当我将鼠标悬停在内圈上时 所有变化都是两个内圈向屏幕右下角移动 根本不旋转 我在这里缺少什
  • yii2 作曲家更新错误:版本字符串“2.*”无效

    我正在使用作曲家更新Yii2项目 但它正在退出但有异常 我已经将composer更新到最新版本 c6cc6dd6070871f4b198ed39f76dd8047c116b02 但它仍然不起作用 Importing tag v2 0 2 2
  • 何时在 C++ 中使用指针

    我刚刚开始学习C 中的指针 我不太确定何时使用指针 何时使用实际对象 例如 在我的一项作业中 我们必须构造一个 gPolyline 类 其中每个点都由一个 gVector 定义 现在 我的 gPolyline 类变量如下所示 private
  • 如何在索引列的查询中使用限制而不扫描所有行?

    这是我的桌子 在我的桌子上 Clustering key 主键和自增量 ID 索引栏 Data 文本数据类型列 Position 索引栏 维持顺序Data 我的表有 90 000 行 内容相同ID等于 5 我想要前 3 行ID等于 5 我的
  • 如何使用 Twitter Bootstrap 2 获得 16 列响应式布局?

    我从各种论坛帖子中收到混合信号 它是否通过更改而本地存在 Default 940px grid gridColumns 12 gridColumnWidth 60px gridGutterWidth 20px gridRowWidth gr
  • 如何向 cats-effect 的资源添加正确的错误处理

    我正在尝试使用纯功能性方式获取一些基本文件 IO 写 读 猫效应 https typelevel org cats effect 关注后this https typelevel org cats effect tutorial tutori
  • SNS 到 Lambda 与 SNS 到 SQS 到 Lambda

    如果有人可以帮助解释 我想了解我的工作流程中是否需要 SQS 在我的应用程序中 当采取操作时 它会将信息提交到 SNS 主题 该主题调用 Lambda 进行一些处理 这效果很好 当我在线研究时 似乎人们也在这个堆栈中使用 SQS 其中 SN
  • 来自 csv 文件的 Unicode 表情符号在 python 中

    我有一些用户推文的 csv 数据 在excel中显示如下 It felt like they were my friends and I was living the story with them retired IAN1 我已将此 cs
  • 在 WebSphere Application Server 7.0 上设置 URL 资源?

    我需要在 WebSphere 中设置 URL 资源 如下所示this http www ibm com developerworks websphere library techarticles 0502 botzum 0502 botzu
  • 使用nodejs Dynamodb 创建表?

    我想创建一个表 并想使用 Dynamodb NodeJs 创建 6 7 列 属性 我已经创建了一个表 但无法添加超过 2 个属性 我是这个平台的新手 任何人都可以帮助我在一个表中创建多个属性 在 DynamoDB 上 您必须仅定义Hash
  • DataGridView 完整显示单元格内容

    我正在用数据填充 datagridview 并且数据在每个单元格中并不完全可见 如何显示所有包含 Enter 键的内容 这将完整地显示单元格内容 DataGridView1 AutoSizeRowsMode DataGridViewAuto
  • PHP:加密/解密短字符串

    我需要加密和解密短字符串 例如 product1234 我已将 mcrypt encrypt 和 mcrypt decrypt 与各种密码一起使用 问题在于 它总是将扩展字符放入结果字符串中 这会导致我无法控制的应用程序代码的某些方面出现一
  • Xcode 警告:不可变属性不会被解码,因为它是用无法覆盖的初始值声明的

    运行 Xcode 12 我的 Swift 5 Xcode 项目现在每当Decodable or Codable类型声明一个let具有初始值的常数 struct ExampleItem Decodable let number Int 42