无法将'Dictionary <string ?, string?=“”>。Keys类型的值分配为'String'类型

时间:2019-03-08 17:08:02

标签: ios swift dictionary

这里有一个数据库,我想轻松地将其用于表视图。但是,我无法访问属性,因为我不知道如何从字典分配给字符串。它告诉我:

  

无法将类型'Dictionary.Keys'的值分配给   输入“字符串”

import Foundation

struct Test {
    var title: String
    var tagPreview: Tagpreview
}

struct Tagpreview {
    var tag: [String?:String?]
} 

var cases = [
    Test(title: "title1", tagPreview: Tagpreview(tag: ["tag1": "preview1"])),
    Test(title: "title2", tagPreview: Tagpreview(tag: ["tag2": nil])),
    Test(title: "title3", tagPreview: Tagpreview(tag: [nil: nil])),
    Test(title: "title4", tagPreview: Tagpreview(tag: ["tag4": "preview4", "tag5": nil]))
]

我想使用第二个结构中字典的键和值稍后在单元格中填充文本标签:

cell.titleLabel?.text = cases[indexPath.row].tag.preview.keys //ERROR
cell.textLabel?.text = cases[indexPath.row].tag.preview.values//ERROR

关于字典的某些事情我找不到,以及针对此问题的全面解决方案。 现在,如果您知道另一种如何轻松填充它们的方法,我将非常感谢!提前非常感谢您,祝你有美好的一天!

1 个答案:

答案 0 :(得分:0)

您收到的错误是由于Dictionary.keys返回了您选择作为键的Type的集合。在您的情况下,调用cases[indexPath.row].tag.preview.keys返回String?的集合(类似于[String?]

现在,如果您希望访问此集合中的特定值,则应该可以这样做:

let someText = cases[indexPath.row].tagPreview.tag.keys.map{ $0 }[someIndex]

请注意,使用map()。它只是将Strings集合转换为String数组,其索引为Int,从而使访问单个元素变得更加容易(否则,您将需要Collection的更通用/更麻烦的迭代API)。

仅提供一点注释,提取数据并将其直接映射到视图似乎有点困难,如果您打算在许多地方使用这种映射,则可能需要花一些中间数据类型才能在展示时使用它们;这真的取决于您的喜好和整体问题。