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 警告:不可变属性不会被解码,因为它是用无法覆盖的初始值声明的 的相关文章

  • Swift 中使用 T 型进行泛型调用

    在我的应用程序中 我想创建一个通用方法 该方法根据给定类型 T 创建一个对象数组 我创建了以下函数 func getArray
  • 如何使用 SwiftUI 拖动工作滑块

    我想拖动一个滑块 当然也让它滑动 我可以做其中之一 但我不能两者都做 如何拖动并拥有可用的滑块 我也尝试找到一种方法来删除手势 但我找不到方法来做到这一点 还尝试了 Apple Composition SwiftUI Gestures 文档
  • 更改 UIAlertController 的标题字体大小

    我正在尝试更改标题fontSize in an UIAlertController 但我无法管理如何设置我的NSMutableAttributedString to the title 财产 所以我一直在创造NSMutableAttribu
  • 关闭子级后,父级 UIViewController 方向不应更改

    假设我有三个 UI 控制器 A B C A 是我的根控制器 在 ShouldAutoRotate 方法中我返回 YES 我从A到B呈现ModalView B gt 在ShouldAutoRotate方法中我返回Portrait 然后从B我向
  • Xcode - 免费清除设备文件夹?

    我正在删除一些文件夹和文件 以便在驱动器上腾出更多空间 我知道在路径中 Library Developer CoreSimulator Devices 每个模拟器和每个版本都有文件夹 这个文件夹对我来说大约有 11GB 大小 我知道我可以删
  • geocoder.geocodeAddressString 今天不再适用于快速更新

    https developer apple com library prerelease mac releasenotes General APIDiffsMacOSX10 11 Swift CoreLocation html https
  • 无法在 Swift 中获取 plist URL

    我对这个真的很困惑 网络上有很多问题询问 如何从 Swift 中的 plist 文件获取信息 并且到处都发布了相同的答案 let path NSBundle mainBundle pathForResource Config ofType
  • Expo eas-cli iOS 构建失败

    我已经使用 React Native 创建了一个应用程序 并尝试通过 Expo 的 eas cli 创建一个 iOS 应用程序商店 跑步时eas build platform ios the Fastlane build failed wi
  • Braintree DropIn + Apple Pay,未出现 Apple Pay 项目

    我成功调用DropIn来自 Braintree SDK 的视图 这BTDropInRequest设置应显示三项 PayPal 信用卡 苹果支付 但由于某种原因在DropIn视图仅呈现两个项目而不是三个 PayPal 信用卡 我做错了什么 准
  • 如何修复C风格的for语句?

    什么是正确的修复方法C 风格的 for 语句对于下面发布的代码 目前我正在交战 C 风格的 for 语句已弃用 并将在将来删除 斯威夫特的版本 var ifaddr UnsafeMutablePointer
  • iOS 上每个选项的带有图像的操作表

    有没有办法在 iOS 上将图像添加到操作表中 与苹果在应用程序商店或苹果音乐应用程序上所做的一样 我对苹果文档的基本搜索表明我没有在操作表中子类化或添加子视图 UIActionSheet 并非设计为子类化 也不应向其层次结构添加视图 苹果文
  • 在 Swift 中将 Int 转换为 UInt32

    我正在制作一个 Tcp 客户端 因此使用CFStreamCreatePairWithSocketToHost它期望第二个参数为 UInt32 这是我正在尝试做的事情的示例 func initNetwork IP String Port In
  • 如何向 JSQMessagesViewController 单元添加自定义视图,使其包含一个带有一些按钮和文本视图的视图?

    我在用https github com jessesquires JSQMessagesViewController issues 1820 https github com jessesquires JSQMessagesViewCont
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • Swift 如何设计 UIWebView 在 Story Board 中自动调整全屏大小

    我在 StoryBoard 中设计了一个 320x500 的 UIWebView 但是当在 Iphone 6 Plus 模拟器中运行时 我想要这个 webview 全屏或随设备屏幕缩放 如何在故事板中制作它 我在 ViewDidLoad 中
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 如何添加授权以从新钥匙串对应用程序进行代码签名,而无需任何人工交互

    我正在尝试使用特定证书自动化构建 iPhone 应用程序的过程 因此 想象一下 如果不同的用户将他们的证书上传到系统中 并且可以立即用于代码签名 我想在没有任何交互的情况下做到这一点 我也不想用不同的用户证书弄乱系统或登录钥匙串 为此我有
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star

随机推荐

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

    我正在研究代码生成 并遇到了泛型的障碍 这是导致我出现问题的 简化 版本 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