【问题标题】:Array of Any call function append.contentsOf syntax error in Swift 3.2Swift 3.2 中的任何调用函数 append.contentsOf 语法错误的数组
【发布时间】:2018-04-11 17:49:32
【问题描述】:
var dataSource: [Any] = []

我像上面一样声明数组,然后当我这样做时

// fetchedData is an array of Swift object
dataSource.append(contentsOf: fetchedData)

我有编译错误说Extraneous argument label 'contentsOf:' in call [Any] 类型认为我正在传递一个对象,我不喜欢将 dataSource 类型更改为特定的类型。有没有办法解决这个问题?

【问题讨论】:

  • 尝试将`append(contentsOf: fetchedData as [Any])
  • 考虑使用比Any更具体的东西。
  • 呼应@vadian 的观点,几乎没有[Any] 是正确类型的情况。您几乎可以肯定地错误地解决了这个问题,虽然可以解决这个问题(如 Julien 的回答),但如果您继续沿着这条路走下去,您可能会不断地与 Swift 作斗争。 Any 不是通用类型;它适用于非常专业的问题,难以正确使用。

标签: ios arrays swift syntax


【解决方案1】:

您只能将append(contentsOf:) 与元素类型与您要附加到的数组完全相同的数组一起使用。这意味着它只有在dataSource 的类型为[Any] 时才有效。您可以使用

解决此问题
append(contentsOf: fetchedData as [Any])

现在你看到这个奇怪的错误“Extraneous argument label 'contentsOf:' in call”的原因是因为即使在你的代码中fetchedData不符合[Any]的条件,它也符合Any的条件,这意味着您可以在技术上使用另一个附加 (append(_ newElement: Any)),将 fetchData 添加为单个元素并创建一个两级数组。 Swift 认为你想这样做,为了让它像这样工作,你必须删除参数“contentsOf”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2018-05-05
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多