在 swift4.1 中将 Any 转换为 Float 总是失败

2023-11-23

在以前的版本中,要从 a 获取浮点值[String: Any]字典,我可以用let float = dict["somekey"] as? Float,但是在swift4.1中,不起作用。似乎是这样的类型dict["somekey"]已被隐含地推断为Double在我得到它之前,所以从Double to Float总是失败。我想知道这是一个新特性还是只是一个错误。

——更新内容如下。

我重新下载了Xcode9.2并做了一些实验,现在我想我弄清楚发生了什么。这是测试代码:

let dict: [String : Any] = ["key": 0.1]

if let float: Float = dict["key"] as? Float {
    print(float)
} else {
    print("nil")
}

let dict1: [String : Any] = ["key": NSNumber(value: 0.2)]

if let float: Float = dict1["key"] as? Float {
    print(float)
} else {
    print("nil")
}

let number = NSNumber(value: 0.3)
if let float: Float = number as? Float {
    print(float)
} else {
    print("nil")
}

let number1 = NSNumber(floatLiteral: 0.4)
if let float = number1 as? Float {
    print(float)
} else {
    print("nil")
}

在 Swift 和 Swift 4.1 的 Playground 中运行这段代码,结果是不同的。在 Swift4 中,结果是nil 0.2 0.3 0.4,在 Swift4.1 中结果是nil nil nil nil。从结果中我可以了解到两点: 1.当我们将JSON数据转换为[String : Any] dictionaryJSONSerialization类,数值保存为NSNumber对象,但不是Int, Double or Float。 2.在Swift4中,我们可以使用let float = NSNumberOjbect as? Float得到一个Float值,但在 Swift4.1 中我们不能。但我们仍然可以得到Int or Double无论是在 Swift4 还是 Swift4.1 中,都以这种方式获取值。 最后,这是一个新功能还是一个错误?如果有人知道的话,可以给个公告链接吗?


你需要区分两种情况(在 Swift 3 中是三种情况):

  • Any包含 Swift 原生Double
  • Any含有一个NSNumber

(在 Swift 3 中,有类型保留NSNumber case正常以外的NSNumber.)


当你创建一个原生 SwiftDictionary例如[String: Any],并设置Double在更新中以正常方式值:

let dict: [String : Any] = ["key": 0.1]

在这种情况下,Any保存代表的元数据Double和原始值0.1 as Double.

并铸造Any保持Double to Float总是失败。作为Double to Float不能转换为as-铸件。

let dblValue: Double = 0.1
if let fltValue = dblValue as? Float { //<-Cast from 'Double' to unrelated type 'Float' always fails
    print(fltValue)
} else {
    print("Cannot convert to Float")
}
//->Cannot convert to Float

但是,如果出现Any保持NSNumber,就像往常一样,当Array or Dictionary桥接自NSArray or NSDictionary,以前的 Swift 和 Swift 4.1 之间的行为有所不同。

的结果JSONSerialization符合这个案例。

在前雨燕队中,(正常)NSNumber to Float这是一次总是成功的行动。

在 Swift 4.1 中,行为随着我在评论中展示的新功能而改变:

SE-0170 NSNumber 桥接和数字类型


我省略了 Swift 3 中曾经发现的第三种情况,它已经过去了。

但如何获得你的信息非常重要Dictionary or Array,以及如何设置它们的值来解决问题Any to Float.


最后,这是一个新功能还是一个错误?如果有人知道的话,可以给个公告链接吗?

这是一个新功能,而不是一个错误。请参阅上面的链接和下面的相关主题。

无法将 NSNumber 桥接到 Float Swift 3.3

将 NSNumber 转换为 Float 时出现意外行为

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

在 swift4.1 中将 Any 转换为 Float 总是失败 的相关文章

  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • 如何缓存单元格并重用每个单元格中嵌入了 avplayers 的集合视图中的单元格?

    基本上我想做的是缓存单元格并让视频继续播放 当用户滚动回到单元格时 视频应该只从播放的位置显示 问题是玩家被移除并且单元格最终出现在随机单元格上 而不是其指定区域 您需要有两个视频才能正常工作 我从这里下载了视频https commonda
  • Swift 每 5 天重复一次 LocalNotification

    如何每 5 天上午 10 00 重复一次 LocalNotification 我尝试这个 但它不起作用 let content UNMutableNotificationContent content title Hello content
  • 如何在 Swift 中更改 UIButton 图像

    我正在尝试使用 Swift 更改 UIButton 的图像 我应该怎么办 这是 OBJ C 代码 但我不知道 Swift 的情况 playButton setImage UIImage imageNamed play png forStat
  • Swift 中 flatMap 和 CompactMap 的区别

    似乎在斯威夫特 4 1 flatMap已弃用 不过有一个新的方法斯威夫特 4 1 compactMap哪个在做同样的事情 和flatMap您可以转换集合中的每个对象 然后删除任何为零的项目 喜欢平面地图 let array 1 2 nil
  • 从 Xcode iOS 项目运行 swift 脚本作为构建阶段

    这是一个简单的快速脚本 usr bin env xcrun swift import Foundation let task NSTask task launchPath bin echo task arguments farg1 arg2
  • JavaScript 与 WKWebView 的同步本机通信

    使用 WKWebView 可以在 JavaScript 和 Swift Obj C 本机代码之间进行同步通信吗 这些是我尝试过但失败的方法 方法 1 使用脚本处理程序 WKWebView接收JS消息的新方式是使用委托方法userConten
  • Swift 3.0 中使用索引访问字符串的 Big O

    访问的复杂度是多少String与index in swift 3 0 复杂度与数组访问或 O N 或其他相同吗 来自文档 https developer apple com library prerelease content docume
  • 在 SwiftUI App 中实现深色模式切换

    我目前正在我的应用程序中研究深色模式 虽然由于我的 SwiftUI 基础 深色模式本身并不困难 但我正在努力选择将 ColorScheme 设置为独立于系统 ColorScheme 的选项 我在苹果人机界面指南中找到了这一点 https i
  • SwiftUI ScrollView 只向一个方向滚动

    尝试使用视图作为列表行样式来创建自定义列表 以摆脱默认情况下列表中难看的分隔线 但是 一旦我将 ZStack 行放入滚动视图中 滚动视图就会在两个方向上滚动 而不仅仅是垂直滚动 这是内容视图 NavigationView ScrollVie
  • AVPlayerLooper 每次迭代后黑闪

    我正在使用 Apple 的示例代码在UICollectionViewCell背景 我在用着AVPlayerLooper 因为它是同一视频的迭代 我的问题是 当视频结束时 它会显示轻微的黑屏闪烁 也许它正在将视频搜索到0时间 我不确定 这是代
  • 我可以对图像进行动画处理吗 iOS8 LaunchScreen.xib

    问题 有没有方法可以为针对 iOS 8 1 部署的 Xcode 6 项目的 LaunchScreen xib 文件中的任何内容设置动画 Context 我正在寻找制作简单的动画来传达活动或在用户等待时分散他们的注意力 例子 加载栏 活动指示
  • NSRange 到 Range

    我怎样才能转换NSRange to Range
  • 在 swift 中从本地视频创建缩略图

    如何从本地视频文件快速创建缩略图 例如 如果视频文件路径位于此处 file Users Dev Library Developer CoreSimulator Devices F33222DF D8F0 448B A127 C5B03C64
  • 失败:错误域=NSURLErrorDomain代码=-1004“无法连接到服务器。”

    首先 我想列出我已阅读并尝试实现答案的帖子 避免重复 iOS 9 和 iOS 10 中的应用程序传输安全问题 https stackoverflow com questions 40280936 app transport security
  • 使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

    我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构 数据库 我目前正在使用一个简单的领域结构 其中有一个对象 A 和一个可以容纳大量 A 的对象 B 因此 在 iPhone 上 用户可以创建 B 并添加 A 当然还可
  • Swift 错误:无法从 AST 上下文获取模块“My_App”

    我正在使用 Swift 3 Xcode 8 1 CocoaPods 1 1 1 运行后pod update 每次我尝试使用 Xcode 的 lldb 控制台时 它都会打印错误 例如 po self输出 共享 Swift 状态My App已出
  • 快速布尔运算

    这实在令人困惑 有人有什么想法吗 let viewHasMovedToRight false initially I want this to be false then func moveViewToRight sender UIButt
  • 数组的扩展,其中元素是可选的

    我有一个数组String like so var myArray String 2 banana nil 31 我还有另一个数组String像这样 var myStringArray String 2 3 我为 Array 编写了一个扩展
  • iOS 视频压缩 Swift iOS 8 损坏的视频文件

    我正在尝试压缩用户相机从 UIImagePickerController 拍摄的视频 不是现有视频 而是动态视频 以上传到我的服务器 并花费少量时间来完成此操作 因此较小的尺寸是理想的选择 而不是 30 较新质量的相机为 45 mb 这是在

随机推荐

  • 将字节数组转换为图像 Node.js

    我有一个很长的字节数组 数字从 0 到 255 而且我知道这是一个图像 所以我怎样才能像文件一样保存它 我尝试了很多事情 但都没有成功 图像已创建 但由于已损坏而无法打开 File js function saveImage filenam
  • 无法在旧版本的 JUnit 上运行简单的 JUnit TestCase

    我正在尝试在 JUnit 3 7 版本上运行一个简单的 JUnit 测试用例 我无法将其升级到最新版本 运行 IntelliJ 当我尝试运行 JUnit 测试用例时出现以下异常 Exception in thread main java l
  • Javascript 线程处理和竞争条件

    假设我有如下代码 var shared 100 function workWithIt shared 100 setTimeout workWithIt 500 setTimeout workWithIt 500 理想情况下 这段代码应该向
  • PHP PDO简单插入或更新函数

    在尝试创建一个简单的 PHP PDO 更新函数 如果未找到该字段将插入它 时 我创建了这个小片段 function updateorcreate table name value global sodb pro sodb gt prepar
  • 在VB.NET中用“”分割字符串

    假设这是我的字符串 1 2 3 我想用 空格 分割字符串并每次显示字符串的一部分 这将满足您的需要 Dim str As String 1 2 3 Dim strarr As String strarr str Split c For Ea
  • SQL 连接表值函数与表,其中表字段是函数输入

    我有一个名为 fn SplitCommaSep 的表值函数 它用逗号分隔文本字段 从 a b c 到 3 行 a b c 如何将其连接到表中 将表列作为输入 为此 假设表 MyTable 有 2 列 即 Id 和 TextWithComma
  • 如果表的长度不同,如何对多个表中的列值求和?

    好吧 这应该是一个简单的问题 但我正在寻找一种尽可能快的解决方案 假设我有 3 个表 表的数量会更大 tab1 lt table c 1 1 1 2 2 3 3 3 tab2 lt table c 1 1 4 4 4 tab3 lt tab
  • WPF 位图性能

    我试图了解为什么我的图像不活泼 因此我构建了一个示例来测试 WPF 性能 我使用计时器来计算 显示图像 事件处理程序执行的时间 并使用秒表来测量图像出现在屏幕上所需的时间 底线 显示 100 1600 2500 和 3600 个图像时 WP
  • 循环摩卡测试

    我正在尝试使用摩卡中的数据提供程序来编写更少的代码 var should require should var assert require assert var request require supertest var mongoose
  • 使用 LocationClient 定期获取更新的最节省电池效率的方法是什么?

    我正在考虑设置两个单独的警报 每小时收集用户的位置数据 一个每 59 分钟发出一次以 连接 客户端 另一个警报用于实际获取位置 然后断开客户端连接 就电池寿命而言 如果获取用户位置将成为应用程序的主要消耗 我还应该考虑做什么 或者 是否有不
  • 如何编写异步LINQ查询?

    当我读了一堆LINQ相关的东西后 我突然意识到没有文章介绍如何编写异步LINQ查询 假设我们使用 LINQ to SQL 下面的语句很清楚 但是 如果 SQL 数据库响应缓慢 那么使用该代码块的线程就会受到阻碍 var result fro
  • log4j ConversionPattern 时间戳(微秒)

    我想在使用 log4j 生成的日志文件的每个条目的时间戳中添加微秒 这可能吗 我查过官方文档 但没有提到毫秒以下的单位 现在我有一个如下所示的转换模式 d dd MM yyyy HH mm ss SSS 5p t m n 在日期转换模式中
  • 您建议将哪个数据库与 C# (.NET) 应用程序一起使用?

    我正在制定一个小项目计划 当我需要决定使用什么本地数据库系统时 输入数据将存储在网络服务器上 托管 MySQL DB 这个想法是建立一个流程来下载所有必要的数据 例如在午夜 并处理它们 然而 会有很多输入和处理阶段 所以我需要使用某种本地数
  • 处理器有哪些优化代码的技巧?

    我正在寻找诸如代码重新排序之类的东西 这些东西甚至可能在多处理器的情况下破坏代码 最重要的一个是内存访问重新排序 如果没有内存栅栏或序列化指令 处理器可以自由地重新排序内存访问 某些处理器架构对其可以重新排序的数量有限制 Alpha 因最弱
  • 如何使用 lambda 初始化映射?

    我想在单个语句中声明一个完全填充的映射字段 可能包含多个嵌套语句 如下所示 private static final Map
  • Ruby 字符串连接问题

    这有效 irb main 001 0 gt name Rohit Sharma gt Rohit Sharma 但这并不 irb main 001 0 gt fname Rohit gt Rohit irb main 002 0 gt ln
  • 根据眼睛图像进行注视估计

    到目前为止我已经能够准确地检测瞳孔和眼角 您可以在此处看到我在回答自己的问题时上传的一些快照 执行稳定的眼角检测 这是我到目前为止所做的 我通过查看 TLCP TRCP 和 BLCP 来校准用户的视线 在哪里 CP calibration
  • 将大数据加载到 TensorFlow 2.0 中,而不将其加载到 RAM 上

    我已经处理并保存了大量视频和音频文件数据集 大约 8 到 9 GB 的数据 数据保存为 2 个 numpy 数组 每个数组对应一种模态 文件的形状为 number of examples maximum time length featur
  • 带有 ViewPager2 的 BottomSheetBehavior 无法通过嵌套的 RecyclerView 滚动向下滚动

    我有一个类似的观点BottomSheet行为这个视图有ViewPager2里面 每个ViewPager2的页面都是一个垂直的RecyclerView 问题是 当当前垂直 RecyclerView ViewPager 的页面 无法再垂直滚动时
  • 在 swift4.1 中将 Any 转换为 Float 总是失败

    在以前的版本中 要从 a 获取浮点值 String Any 字典 我可以用let float dict somekey as Float 但是在swift4 1中 不起作用 似乎是这样的类型dict somekey 已被隐含地推断为Doub