Swift 是否将[Dictionary<;String,Any?>;]转换为[Dictionary<;String,Any!>;]?斯威夫特3

Swift 是否将[Dictionary<;String,Any?>;]转换为[Dictionary<;String,Any!>;]?斯威夫特3,swift,swift2,swift3,Swift,Swift2,Swift3,我正在尝试将[Dictionary]附加到[Dictionary] 但我一直在犯这样的错误: 无法将[Dictionary]类型的值转换为[Dictionary]的预期参数类型 虽然我没有通过swift2得到这个编译错误 这是我的密码: class A{ var statistics = [Dictionary<String,Any!>](); func1(){ let oldStatiscs = self.func2() //

我正在尝试将
[Dictionary]
附加到
[Dictionary]

但我一直在犯这样的错误:

无法将[Dictionary]类型的值转换为[Dictionary]的预期参数类型

虽然我没有通过
swift2
得到这个编译错误

这是我的密码:

class A{

     var statistics = [Dictionary<String,Any!>]();

     func1(){


       let oldStatiscs = self.func2()
       //i am getting the error here.
       self.statistics.append(oldStatiscs)


    }

    func2 () -> [Dictionary<String,Any?>]{


   }

}
A类{
var统计=[Dictionary]();
func1(){
设oldStatiscs=self.func2()
//我在这里得到了错误。
self.statistics.append(oldStatiscs)
}
func2()->[字典]{
}
}
为什么我在swift3上出现这个错误?为什么swift2没有出现这个错误? 如何解决这个问题


首先感谢

,即使您将两个字典数组都更改为
[Dictionary]
,您仍然会遇到类似的错误。您正在尝试将数组附加到数组。因此,您首先需要更改:

self.statistics.append(oldStatiscs)
致:

但即使进行了更改,也不能将
[Dictionary]
数组附加到
[Dictionary]
数组中

最简单的解决方案是将
[Dictionary]
数组更改为
[Dictionary]
数组

然后,您将得到以下工作代码:

class A {
    var statistics = [Dictionary<String,Any?>]();

    func f1() {
        let oldStatiscs = self.f2()
        statistics.append(contentsOf: oldStatiscs)
    }

    func f2() -> [Dictionary<String,Any?>] {
        return [["Hi":"There"]]
    }
}

您需要解释为什么您认为不能将Swift中的任何可选值更改为
Any?
Any

在Objective-C中甚至是不允许的–字典是无意义的,因为根据定义,一个
nil
值意味着一个缺少的键,您可以通过指定一个
nil
值来删除一个键。@vadian谢谢您的评论,是的,我知道,但目前我无法将其更改为Dictionary。我的问题有什么解决办法吗?
[Dictionary]
在Swift 3中作为变量类型是非法的(它只能存在于少数地方)。你必须改变它。如果无法更改,则无法升级到Swift 3。您还没有看到错误,但是如果您修复了所有其他错误,您将最终遇到“隐式展开的选项仅允许在顶级和函数结果中使用”。您不能再使用这种类型(在Swift 2中这是胡说八道;在Swift 3中这是非法的)@david为什么你不能把
字典
改成
字典
@maddy谢谢你的回答,因为在我的代码中我可以附加零值,我现在不能检查我所有的数千个案例以确保没有附加零。我不明白为什么苹果在swift 3中改变了这一点?
class A {
    var statistics = [Dictionary<String,Any>]();

    func f1() {
        let oldStatiscs = self.f2()
        statistics.append(contentsOf: oldStatiscs)
    }

    func f2() -> [Dictionary<String,Any>] {
        return [["Hi":"There"]]
    }
}
class A {
    var statistics = [Dictionary<String,Any>]();

    func f1() {
        let oldStatiscs = self.f2()
        statistics.append(contentsOf: oldStatiscs)
    }

    func f2() -> [Dictionary<String,Any>] {
        return [["Hi":"There"]]
    }
}