Swift 优化级别破坏了 NSArray 到 Array 的转换

2024-04-22

以下(有点人为的)代码在以下情况下有效:快速优化级别被设定为无 [-Onone](默认用于调试):

    let nsa = NSArray(array: ["foo", "bar"])
    let a = nsa as [String]

但应用程序崩溃了(崩溃日志 http://pastebin.com/fdn20buk)在运行时设置为最快[-O](默认发布)。

我幸运地发现我可以通过这样做来解决这个问题:

    let a = nsa as [AnyObject] as [String]

我的问题有两个:

  1. 你能帮我理解为什么会发生这种情况吗?
  2. 有没有更好的方法将 NSArray 转换为 Array?

UPDATE

这似乎确实是一个错误。我还没有向苹果报告此事。如果其他人愿意花时间这样做,请这样做!


Xcode 上似乎已修复Version 6.3.1 (6D1002).

而且,这不是您最初问题的答案,而是随着新的 Swift 1.2 的引入,as是强制转换,现在被更明确的取代as!。您应该期待NSArray to Array<T> where T != AnyObject or NSObject坠毁。

你最好使用条件转换as?. Avoid !任何时候都有可能。

let nsa = NSArray(array: ["foo", "bar"])
if let a = nsa as? [String] {
    println("a \(a)")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 优化级别破坏了 NSArray 到 Array 的转换 的相关文章

随机推荐

  • 在表上运行查询时 group_concat 被切断

    I have a table that looks likes this 该表包含 343 行 我正在尝试对其运行此查询 create table newTest2 select function name service name min
  • Git 提交作者信息 - Christian S. 到底是谁?

    我最近开始使用 git 我尝试按照设置用户信息的说明进行操作 但似乎出现了严重错误 test h git config list user name MY NAME user email MY EMAIL core repositoryfo
  • Meteor 访问令牌

    使用时Meteor http meteor com 与新的验证 https github com meteor meteor tree auth系统 我怎样才能获得facebook访问令牌 当登录时accounts facebook包裹 从
  • Silverlight 4:在 DataTemplate 中使用转换器时出现“无效的 XAML”

    也许你可以帮助我理解为什么当我尝试在 Visual Studio 2010 设计器中执行以下操作时收到未处理的异常 无效 XAML Page 我有一个Converter named DateTimeConverter将日期转换为德语日期字符
  • 在 C# .NET 中使用操作系统的文件类型映像

    我可以以某种方式使用操作系统中的文件类型图像并将其显示在我的应用程序中吗 如果您知道所需图标的文件的文件名 则可以使用ExtractAssociatedIcon http msdn microsoft com en us library s
  • “路径”参数值无效:不存在文件

    正如提到的Terraform 资源 执行应用时出现连接错误 https stackoverflow com questions 63613944 terraform resource connection error while execu
  • 自定义视图中的波纹效果

    我目前正在创建一个 Android 视图 其中当用户点击它时 我将在点击的坐标周围显示一种波纹 但我不确定该怎么做 我的第一个想法是使缓存无效并每次都使圆圈变大 但这样做似乎不合适也不高效 如果有人以前遇到过同样的问题并且愿意分享一些如何做
  • 独立启用/禁用功能区控件

    我已经多次寻找解决方案 最接近的解决方案是 Ron de Bruinexample http www rondebruin nl win s2 win013 htm但它并没有涵盖我所需要的 我想做的基本上是两件事 示例 我有 4 个按钮 G
  • 如何更改 Android 应用程序的主题?

    我正在开发一个 Android 应用程序 我想更改应用程序的颜色和主题 我怎样才能做到这一点 开发指南解释了如何应用主题和样式 http developer android com intl de guide topics ui theme
  • LUCENE:搜索与正则表达式匹配的术语

    我需要搜索 lucene 索引中的任何术语 匹配特定的正则表达式 我知道我可以使用TermsComponent在solr中 如果配置如下
  • 如何在javascript中创建没有键的json对象数组

    我想创建一个没有键的 JSON 对象数组 如何实现这一点 例如 8 0 2 20 0 2 var hh 9 var mm 8 var qty 2 var data data push hh mm qty 它给出的数据如下 hh 9 mm 8
  • 在特定 WordPress 页面上发送 404 状态代码?

    我需要在 WordPress 的特定页面上发送 404 状态代码 该页面未使用 404 php 模板 最好 我想在我的主题文件中执行此操作 而不是使用 htaccess 这是我所拥有的不起作用的东西 function my 404 if i
  • Kafka 中的“__consumer_offsets”主题是什么

    当我运行此命令时 我得到 2 个主题 我知道我创建了测试主题 但我看到了一个名为 consumer offsets 的附加主题 从名称上看 它与消费者抵消有关 但它是如何使用的呢 bin kafka topics sh list zooke
  • 停止 Spinner.js

    我正在使用 spin js http fgnass github com spin js http fgnass github com spin js 同时加载大的全宽 高图像 问题是我无法停止旋转器 stop 方法似乎不起作用 这就是我所
  • Android Web 视图中的动态进度条

    您好 我如何在其中添加页面加载进度 当页面完全加载时 进度条应该向上 我想将代码放在 case 语句中 提前致谢 这是代码 package com menu import android app Activity import androi
  • PHP 如何在没有 system() 或 exec() 的情况下 ping 服务器

    我正在尝试 ping 服务器 但我的主机被禁用exec and system 由于安全原因 是否还有其他选项可以让它工作 或者我是否必须要求我的主机启用它们 我得到的错误 警告 出于安全原因 system 已被禁用警告 出于安全原因 exe
  • 无法解决 select 语句中第 5 列的排序规则冲突

    我试图将多个字段的组合显示为一个 客户要求我这样做 我尝试了以下命令 但收到上述错误 SQL 片段 SELECT dbo VPayment 2 Serial dbo VPayment 1 Description dbo VPayment 2
  • 在Python中循环多个字典的最佳方法

    我搬字典 user name Bob age 11 place moon dob 12 12 12 user1 name John age 13 place Earth dob 12 12 12 通过加 1 循环遍历每个用户的最佳方法是什么
  • PHP 是如何工作的以及它的架构是什么?

    伙计们 最近我决定回到 PHP 并做一些比简单登录页面更复杂的事情 三年来我一直使用 Java JavaEE 进行编程 并且对 Java 应用程序的架构有很好的理解 基本上 一个虚拟机 一个简单的操作系统进程 运行称为字节码的编译代码 一个
  • Swift 优化级别破坏了 NSArray 到 Array 的转换

    以下 有点人为的 代码在以下情况下有效 快速优化级别被设定为无 Onone 默认用于调试 let nsa NSArray array foo bar let a nsa as String 但应用程序崩溃了 崩溃日志 http pasteb