将[Dictionary <string,any?>]转换为[Dictionary <string,any!>]?迅捷3

时间:2016-11-30 15:17:11

标签: swift swift2 swift3

我正在尝试将[Dictionary<String,Any!>]追加到[Dictionary<String,Any?>]

但我不断收到此错误:

  

无法将[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?>]{


   }

}

为什么我在swift3上收到此错误?为什么我不用swift2得到这个错误? 如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:3)

首先,即使您将两个字典数组都更改为[Dictionary<String,Any>],您仍然会收到类似的错误。您正在尝试将数组附加到数组。所以你首先需要改变:

self.statistics.append(oldStatiscs)

为:

self.statistics.append(contentsOf: oldStatiscs)

但即使进行了此更改,您也无法将[Dictionary<String,Any?>]数组附加到[Dictionary<String,Any!>]数组中。

最简单的解决方案是将[Dictionary<String,Any!>]数组更改为[Dictionary<String,Any?>]数组。

然后您最终得到以下工作代码:

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"]]
    }
}

更好的是摆脱Any?并使用Any

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"]]
    }
}

您需要解释为什么您认为自己无法将Any?更改为Any