【问题标题】:Cannot assign value of type 'Dictionary<String?, String?>.Keys' to type 'String'无法将类型“Dictionary<String?, String?>.Keys”的值分配给类型“String”
【发布时间】:2019-03-08 17:08:02
【问题描述】:

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

无法将“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

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

【问题讨论】:

  • Array(cases[indexPath.row].tag.preview.keys).joined(separator: ", ") 代替?或者类似的东西

标签: ios swift dictionary


【解决方案1】:

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

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

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

注意使用map()。它只是将 Strings 集合转换为索引为 Int 的字符串数组,从而更容易访问各个元素(否则您需要更通用/繁琐的 Collection 迭代 API)。

顺便说一句,提取数据并将其直接映射到视图似乎有点困难,如果您打算在许多地方使用这种映射,则可能需要一些中间数据类型,这些数据类型在呈现时更易于使用;这实际上取决于您的偏好和整体问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多