【问题标题】:Typecast to String from Any got crash从任何类型转换为字符串崩溃
【发布时间】:2019-03-06 11:25:57
【问题描述】:

我有一个代码来排序对象 MyDate 的数组,因为它是 Any,并且值是从 ObjectMapper 设置的,因为从 json 中获取的值是这样的:

... 
"since": "1536642141",
... 

这些代码在 Xcode 9.4.1 中运行良好,但在 Xcode 10 中崩溃。

tempDates = tempDates.sorted(by: { Int(String.init(describing: $0.since))! < Int(String.init(describing: $1.since))!  })

崩溃消息是“致命错误:在展开可选值时意外发现 nil” 这是Xcode的错误吗?我该如何解决?

【问题讨论】:

  • 为什么since 输入Any?为什么不把它设为String
  • 当您在一行中遇到一些运行时错误时,它强烈依赖于代码的其他部分。请尝试显示所有相关代码,简化但足以重现您的问题,这是首选。
  • @AshleyMills 它应该是 Int 或 Double,它是一个时间戳(2018 年 9 月 11 日上午 5:02:21)
  • 是的,这是真的——看起来他们的网络服务需要工作,虽然它返回一个字符串!
  • 我无法将since设置为String,因为有时它返回Int,在其他情况下它是“since”:1536642141

标签: swift casting objectmapper


【解决方案1】:

Int 在使用随机字符串初始化时返回 nil 可能有三个原因。

  1. 当字符串的数字大于 32 位/64 位长度时
    let a = Int(String.init(describing: "153664214187878888878878"))

  2. 当字符串不包含任何数字时
    let a = Int(String.init(describing: "heyyowhynodigits"))

  3. 当字符串有其他带数字的字符时
    let a = Int(String.init(describing: "heyyowhynodigits"))

这些原因应该对 XCode 9.4.1 和 XCode 10 都有效。
不过,在 XCode 9.4.1 上,有可能在 64 位长度的设备/模拟器上测试了 64 位长度的字符串。
但是,在 XCode 10 的情况下,测试是在 32 位设备/模拟器上进行的,这使得案例 1(以上)有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多