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