在字典中创建键/值对时,Swift强制将Bool强制转换为Int错误

时间:2017-04-27 16:17:24

标签: arrays swift xcode dictionary

TLDR:尝试创建一个类型为[String] / [Any]的字典,其中Key包含混合数据类型的数组。然后尝试循环并使用Key和Bool Value创建一个新的dict导致强制转换错误。

提前感谢您的帮助!

长版:

我有4个数组需要转换(2个字符串,1个Bool,1个Int)到字典中。我创建了一个字典,其字符串类型为Key,类型为Any的值,因为我需要将一个String数组作为Key,其余部分作为Value包含在数组中。像这样:

var dict1: [String: [Any]] = [:]

然后我遍历前面提到的数组并创建键/值对:

修改:i = 0

//i-1 to match iteration with array position
while i < dict1.count {
    i += 1
    dict1[stringArray1[i-1]] = [intArray[i-1], boolArray[i-1], stringArray2[i-1]]
}

当我打印字典时,它包含正确的键/值对。

现在我需要创建一个字典,其中只包含来自dict1的Key和来自key的Bool数组值。所以我设置了一个像这样的空数组:

var dict2: [String: [Bool]] = [:]

并尝试创建如下的KeyValue对:

for (string, bool) in dict1 {
dict2[string] = bool
}

我收到一条错误消息,说我需要强制转换为Bool类型。强制转换为Bool类型会产生错误,说swift无法将Int转换为Bool。我尝试将dict2中Key的类型更改为Int类型,并且在预测输入Int时遇到错误。这样做说Swift不能强迫Bool到Int。

1 个答案:

答案 0 :(得分:0)

编辑: 这将有助于你施展

var dict2: [String: [Bool]] = [:]
var dict1: [String: [Any]] = ["a" : [1], "b" : [true], "c": [false], "d" : ["e"]]
for (string, bool) in dict1 {

    dict2[string] = bool.flatMap({$0 as? Bool})
}

这是一个例子,你如何过滤和转换[string:any]字典到[string:bool]

let dict: [String : Any] = ["a" : 1, "b" : true, "c": false]

let casted = dict.filter{$0.value is Bool}.reduce([String: Bool]()) { (dictionary, nextValue) -> [String: Bool] in
    var mutableDictionary = dictionary
    mutableDictionary[nextValue.key] = nextValue.value as? Bool
    return mutableDictionary
}

我认为你跟随这个并将[String:[Any]]转换为[String:[Bool]]

没有问题