【问题标题】:AnyObject is not convertible to 'String'AnyObject 不能转换为“字符串”
【发布时间】:2015-01-12 21:40:10
【问题描述】:

我收到以下错误 AnyObject' is not convertible to 'String'。我在if (answerArray != NSNull() && answerArray != nil)

我尝试将它转换为字符串,但它没有解决问题。我在下面发布了整个代码。

 let answerArray : AnyObject = jsonparser.objectWithString(answer)
 if (answerArray != NSNull()  && answerArray != nil) {

}

【问题讨论】:

  • objectWithString的返回类型是什么?
  • 一个 NSArray 是返回类型。
  • 在这种情况下,if 语句是不必要的 - 如果返回 NSArray,只需将其分配给相同类型的变量:let answerArray: NSArray = jsonparser.objectWithString(answer)

标签: ios swift casting compiler-errors


【解决方案1】:

我的理解是jsonparser.objectWithString(answer) 应该返回一个数组,基于它分配给的变量的名称。

如果是异构类型的数组,您可以尝试转换为NSArray

if let answerArray = jsonparser.objectWithString(answer) as? NSArray {
    ...
}

如果数组应该包含相同类型的对象(比如Int),那么您可以尝试转换为 swift 数组:

if let answerArray = jsonparser.objectWithString(answer) as? [Int] {
    ...
}

请注意,非可选变量永远不会nil - 并且您已将answerArray 声明为非可选变量。

如果您想检查NSNull,我建议阅读this question 和相关答案。

【讨论】:

    【解决方案2】:

    我的猜测是answerArray != nil 的错误 - Swift 很愚蠢,因为它返回的错误是“不可转换为字符串”。更有帮助的是answerArray 不是可选的。

    这就是你的问题——你有let answerArray : AnyObject...——而AnyObject不是Optional。在 Swift 中,'answerArray' 永远不会是 'nil',因为只有 Optional 类型可以是 nil

    如果不查看 jsonparser.objectWithString 所做的事情,我很难更正您的代码,但本质上,编译器会告诉您您正在检查一个非可选类型的 nil - 这是不正确的。

    【讨论】:

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