当前位置: 首页 > 知识库问答 >
问题:

Swift for loop“表达式类型”[[String:String]]”在没有更多上下文的情况下不明确

常朗
2023-03-14

我试图从字典数组访问以下项目,我有两个问题(两者都是不同的方法)。字典数组初始化如下:

var testingArray = [[String: String]()]

testingArray.append(["name": "Ethiopia", "url": "localhost:8088"])
testingArray.append(["name": "Bugatti", "url": "localhost:8088"])
testingArray.append(["name": "Brazil", "url": "localhost:8088"])
testingArray.append(["name": "Jasmine", "url": "localhost:8088"])
testingArray.append(["name": "Hello", "url": "localhost:8088"])

第一种方法:

for (k,v) in testingArray {
    // code here
}

无法运行,原因是(出现在for循环初始化行上):

"Expression type '[[String : String]]' is ambiguous without more context

第二种方法:

for indices in testingArray {
    for(k, v) in indices {
        print(indices.keys)
    }
}

返回以下内容:

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function))

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function))

下面是我试图实现的伪代码等价物:

for(int i = 0; i < sizeOfArray; i++ {
    print testingArray[i]."name"
    print testingArray[i]."url"
}

这几天我一直在琢磨这个问题,但我对swift及其习惯用法还不太了解,无法单独解决这个问题,任何帮助都将不胜感激(特别是如果我们能够找出如何使#1工作)。

共有2个答案

向弘懿
2023-03-14

这很有效

for (k,v) in testingArray.enumerated() {
    for (_, element) in k.enumerated(){
       guard let elem = element.value as? [String: Any] else {
            continue
       }
       print elem["name"]
    }
}
齐振
2023-03-14

我同意错误信息令人困惑/误导。但是testingArray中(k,v)的没有意义,因为testingArray是一个数组,而不是字典。它的元素是字典。

我想你在找这样的东西:

for obj in testingArray {
    print(obj["name"])
    print(obj["url"])
}

 类似资料:
  • 问题内容: 我对Swift编码还很陌生,所以如果这个错误是简单的答案,请原谅! 我不断收到一条错误消息,指出“表达式类型在没有更多上下文的情况下是模棱两可的”。 有什么建议? 谢谢! 问题答案: 您可以帮助编译器了解如下信息:

  • 问题内容: 自从今天早些时候更新到Xcode Beta 6以来,我的应用程序将不再构建,它在Beta 5及更早版本中运行良好。 这是带有错误消息的文件中的代码,尽管我现在知道这并不一定意味着这实际上是错误所在。 包含数据的结构正确符合以下协议。 这是向提供数据的类。 最后是通过链接到的目标视图。 我注意到其他一些人似乎也有类似的问题,例如下面列出的两个问题,但是目前这些问题的答案仍然无济于事。 编

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 问题内容: 我有一个Flask应用程序,当从flask调用它时,调用时不会出现问题。 我需要相同的方法在flask外部工作 我可以使用,但是我想在两种情况下(flask and command line)都可以使用相同的方法 问题答案: 你需要在应用程序上下文中呈现它。将应用程序导入后端代码,然后执行以下操作。

  • 我不想再使用powermock了。因为junit5开始模拟静态类。因此,我试图摆脱powermock方法。 当我使用PowerMock时,我可以很容易地发现一个具有私有构造函数的类,然后我调用静态方法。 这是我代码的一部分(当我使用PowerMock时) 在我做了MessageValidationUtils.class的间谍对象后,我正在测试这个: 经过一些研究,我找不到任何与监视一个具有私有构造

  • 我正在尝试将Cucumber集成到现有的Spring Boot项目中 当前项目是单个Maven模块 单元测试(不含Spring上下文)和集成测试(含Spring上下文)组合在同一个测试文件夹中。 我想做的是能够调整我的单元测试和集成测试。 但是一旦我添加了依赖项(为了能够在规范旁边运行Spring上下文),它就要求文件夹中的所有测试都用注释。 下面是我的测试套件,配置为获取测试规范。 是否可以将两