Swift表达式错误(模棱两可,无需更多上下文)

zhuqh93

我是Swift的新手,目前正在练习一些基础知识,当我试图弄清为什么字典内容不排序时,我从某人的帖子中找到了答案,解决方案是在其前面添加一个索引,如下所示:

[Int [String,String]]

当我尝试测试时,出现错误

expression type '[Dictionary<Int, Dictionary<String, Int>>]' is ambiguous without more context

不知道出了什么问题,所以我只显示代码并寻求帮助。

var animalNumbers = [[1: ["Cat": 1]], [2: ["Dog": 10]], [3: ["Aye-Aye": 98]]]

for (key, (animal, num)) in animalNumbers {
    print ("\(animal) = \(num)")
}

我怀疑您可能误解了有关数字键的建议。

首先,让我们退后一步。我假设您的原始字典如下,并且您正在尝试解决未保留订单的问题:

let animals = ["Cat": 1, "Dog": 10, "Aye-Aye": 98]

我怀疑您阅读了其他答案并得出结论,您需要将其转换为:

let animalNumbers = [[1: ["Cat": 1]], [2: ["Dog": 10]], [3: ["Aye-Aye": 98]]]

那是一个嵌套字典的数组,每个字典都有一个数字键。但这没有道理。您解决了两次问题。它是字典的有序数组,然后数字键还提供一种以某种特定顺序检索值的机制。那是多余的。

数字键的想法是使字典的键为数字值,而其值本身就是字典。如果要这样做,它比那里的要简单,而仅仅是:

let animalNumbers = [0: ["Cat": 1], 1: ["Dog": 10], 2: ["Aye-Aye": 98]]

请注意,这是带有数字键的字典[Int: [String: Int]]无论如何,一旦有了该字典,理论上就可以做到:

for i in 0 ..< animalNumbers.count {
    for (name, value) in animalNumbers[i]! {
        print(name, value)
    }
}

但是,在对我怀疑其他答案所暗示的内容进行了反向工程后,我应该说这确实不是一个很好的模式。如果要插入值,则必须经历重建所有这些数字键的噩梦。

取而代之的是,仅使用简单的字典数组()[[String: Int]],该字典是有序的,但是消除了手动构建的数字键引入的许多问题:

let animals = [["Cat": 1], ["Dog": 10], ["Aye-Aye": 98]]

那么你就可以:

for dictionary in animals {
    for (name, value) in dictionary {
        print(name, value)
    }
}

最后,更好的是,您不应该处理字典数组,而应该处理自定义类型数组:

struct Animal {
    let name: String
    let value: Int
}

let animals = [
    Animal(name: "Cat", value: 1),
    Animal(name: "Dog", value: 10),
    Animal(name: "Aye-Aye", value: 98)
]

现在您正在处理[Animal]类型,您可以:

for animal in animals {
    print(animal.name, animal.value)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

表达式的类型是模棱两可的,在Swift 3中没有更多上下文

在 swift 中,如果没有更多上下文,表达式类型是模棱两可的?

Swift 3.0:如果没有更多上下文,表达式的类型是否模棱两可?

表达式类型'()'在没有更多上下文的情况下是模棱两可的

“表达式的类型是模棱两可的,没有更多上下文”-引用appDelegate

表达式类型“ DataRequest”是模棱两可的,没有更多上下文

蒸气加密:表达式类型“数据”是模棱两可的,没有更多上下文

Swift 中没有更多上下文错误的模棱两可

为什么会出现错误“表达式类型在没有更多上下文的情况下是模棱两可的”?

pattern.firstMatch 是获取错误:表达式类型 '@lvalue String?' 在没有更多上下文的情况下是模棱两可的

SwiftUI Picker选择参数给出“表达式类型'Binding <_>'是模棱两可的,没有更多上下文”错误

Swift 2.0:在没有更多上下文的情况下,表达式的类型是否模棱两可?SortInPlace

Swift 2.0:在没有更多上下文的情况下,表达式的类型是否模棱两可?

Swift 4 - 表达式类型'@lvalue String?' 在没有更多上下文的情况下是模棱两可的

错误表达式类型“ @lvalue字符串?” 没有更多的上下文是模棱两可的

在 swift source 中,表达式的类型是模棱两可的,没有更多的上下文

在HealthKit HKStatisticsQuery中收到“错误的表达类型是模棱两可的,没有更多上下文”

表达式类型 '@lvalue String?' 在没有更多上下文的情况下是模棱两可的

在使用解密时,表达式类型是模棱两可的,没有使用AES的更多上下文

表达式的类型是模棱两可的,在`ForEach`中没有自定义类数组的更多上下文

泛型函数参数,给出“表达类型是模棱两可的,没有更多上下文”

三元运算中的“表达类型'布尔'是模棱两可的,没有更多上下文”

Swift Array()强制模棱两可,没有更多上下文,但仅在扩展中

Swift 5 结果:XCTAssertEqual 在没有更多上下文的情况下是模棱两可的

在Alamofire中没有更多上下文的情况下表达类型是模棱两可的。uploadswift 3

使用VTCompressionSessionEncodeFrame时,如何在没有更多上下文的情况下解决“ OSStatus”是模棱两可的

如何解决tableView上下文中的“ Reactive <_>'模棱两可”错误

Swiftui错误:表达式类型不明确,没有更多上下文

错误:“表达式类型在没有更多上下文的情况下是含糊的”