【问题标题】:Swift: cannot invoke 'addObject' with an argument list of type '(AnyObject?!)' [closed]Swift:无法使用“(AnyObject?!)”类型的参数列表调用“addObject” [关闭]
【发布时间】:2015-08-20 09:58:15
【问题描述】:

我创建了一个数组,atm 为空:var textArray: NSMutableArray! = NSMutableArray()

我正在尝试使用像本教程这样的数据填充这个数组:https://youtu.be/0qE8olxB3Kk 但我的数据不像他那样简单的字符串,它们是从 JSON(字典数组)中获取的,并且类型为 AnyObject?!如果需要,我可以用我的做法更新这个主题,但如果它们没用,我不会用过多的代码来超载这篇文章。

当我像这样填充我的数组时:self.textArray.addObject(summary)

我收到错误消息cannot invoke 'addObject' with an argument list of type '(AnyObject?!)'

summary 是我的 JSON 字典之一,类型为 AnyObject?!

我知道数组应该由 AnyObject.. 类型的数据填充。 有没有办法将AnyObject?! 转换为AnyObject?我没见过像...?!这样的类型,所以也许问题就在那里,我不知道......

感谢您的帮助,我可以通过如何从通过 HTTP 发布请求或任何其他信息获得的 JSON 中提取字典来更新此主题。

问候,

fselva

【问题讨论】:

  • “AnyObject?!”是什么意思? ?表示一个可选的,!是一个展开运算符 你写的东西听起来很奇怪

标签: ios arrays json swift populate


【解决方案1】:

您必须双重展开 AnyObject?! 变量:

let obj = "Alice" as AnyObject?!
var arr = [AnyObject]()
arr.append(obj!!)

【讨论】:

  • 我们已经差不多好了,我有Cannot invoke 'addObject' with an argument list of type(()) arr 的类型是 [(AnyObject)] 也许这就是原因?
  • 如果类型为(AnyObject),则表示包含AnyObject 的元组。您的 summary 变量可能是一个元组。
  • 我可能会提醒我元组是什么。
  • 我的解决方案有效,但你是对的,@vacawama 的解决方案更好,因为它更安全。至于元组,我只是猜测,给出你的评论。不确定 100% 没有看到你的对象是如何实际声明的。
【解决方案2】:

你需要解开可选的两次。

var textArray: NSMutableArray! = NSMutableArray()

var a:AnyObject?! = "hello"

你可以通过强制展开来做到这一点:

textArray.addObject(a!!)

但这是不安全的,如果任何一个可选选项是nil,它就会崩溃。安全的方法是使用可选绑定:

if let temp1 = a, temp2 = temp1 {
    textArray.addObject(temp2)
}

【讨论】:

  • 这个安全的解决方案似乎不错,谢谢@vacawama,不知道我们可以像这样打开两次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多