在词典中创建键/值对时,Swift Force将Bool施加到INT错误



tldr:尝试使用包含混合数据类型的数组的键来创建一个字典[string]/[任何]。然后尝试循环循环并创建一个新的dict,只有键和bool值会导致力铸造错误。

事先感谢您的帮助!

长版本:

我有4个阵列需要将(2个字符串,1个布尔,1个int(转换为字典。我创建了一个用类型字符串的键和类型的值创建的字典,因为我需要一个字符串数组为键,其余的将包含在数组中作为值。这样:

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

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

现在,我需要创建一个用键和bool数组值的键创建一个字典。因此,我已经设置了这样的空数组:

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

尝试创建这样的键值对:

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

我遇到了一个错误,说我需要强迫演员来键入布尔。施法施放打算布尔会造成错误,说斯威夫特无法将int转换为布尔。我尝试将dict2中的键的类型更改为type int,并出现了一个错误来预测type int。这样做说Swift不能迫使Bool迫使Bool

编辑:这将帮助您进行演员

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})
}

这是一个示例

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:[任何]]施放到[string:[bool]]

没有问题

最新更新