这里有一个数据库,我想轻松地将其用于表视图。但是,我无法访问属性,因为我不知道如何从字典分配给字符串。它告诉我:
无法将类型'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
关于字典的某些事情我找不到,以及针对此问题的全面解决方案。 现在,如果您知道另一种如何轻松填充它们的方法,我将非常感谢!提前非常感谢您,祝你有美好的一天!
答案 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)。
仅提供一点注释,提取数据并将其直接映射到视图似乎有点困难,如果您打算在许多地方使用这种映射,则可能需要花一些中间数据类型才能在展示时使用它们;这真的取决于您的喜好和整体问题。