【问题标题】:Could not cast value of type '__NSCFConstantString' to 'NSArray'无法将“__NSCFConstantString”类型的值转换为“NSArray”
【发布时间】:2023-04-07 15:35:01
【问题描述】:

我从服务器收到一个 JSON 响应,其中包含字典元素,其中一个元素可能是数组,其中包含 ["abc","def","ghi"] 等值,我将此数组分配给名为数组的变量如下代码所示:

self.array = infoDictionary["element1"] as! [String]

我面临的问题是,如果键“element1”为空,那么我会收到错误:

无法将“__NSCFConstantString”类型的值转换为“NSArray”

这会导致我的应用程序崩溃。如果有“”反对“element1”,我怎样才能避免我的应用程序崩溃?

【问题讨论】:

  • 我的建议:禁止使用as! 和强制解包你的代码。在任何地方使用安全展开、捕获错误、为您的 if let ... 条件创建 else 子句等。
  • 我在块外声明了一个变量,所以我不能使用 if let...
  • 错了。您可以始终安全地打开包装。 :) 如果您不能使用if let,那么请使用guard let 或任何其他安全展开技术。 学习这些技巧。 :)
  • 错误信息显示键element1的值是String而不是Array,它应该是self.array = infoDictionary["element1"] as! String
  • 它可以是字符串或数组,如果我把它写成 self.array = infoDictionary["element1"] as! String 那么如果它返回数组怎么办,那么应用程序将再次崩溃。

标签: ios arrays json string swift


【解决方案1】:

错误消息显示键 element1 的值是 String 而不是 Array。

如果该值可能同时是 String 和 [String],则必须检查类型:

if let item = infoDictionary["element1"] {
   if item is String {
      print("I'm String")
   } else if item is [String] {
      print("I'm Array")
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2020-03-26
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多