【问题标题】:How to add array of [String] to dictionary如何将[String]数组添加到字典
【发布时间】:2023-03-10 20:44:01
【问题描述】:

请在代码下方找到正确和正确的理解:

var dictUpdateTasks = [String: String]()
var arrAddSteps = [String]()

 self.dictUpdateTasks["dDay"] = self.btnAddDate.titleLabel?.text
 self.dictUpdateTasks["rem"] = self.btnRemindMe.titleLabel?.text
 self.dictUpdateTasks["steps"] = arrAddSteps

现在,这是错误,在线

"self.dictUpdateTasks["steps"] = arrAddSteps"
// Error: Cannot assign value of type '[String]' to type 'String?'

请指导。谢谢。

【问题讨论】:

  • var dictUpdateTasks = [String: Any]()
  • @Retterdesdialogs 是的,我对目标 c 的快速、完整经验没有太多经验

标签: ios arrays swift iphone dictionary


【解决方案1】:

原因:

dictUpdateTasks[String:String] 类型,即它只能接受 String 类型的值。

dictUpdateTasks["steps"] = arrAddSteps

但在上面的代码中,您尝试将[String] 类型值添加到dictUpdateTasks

解决方案:

dictUpdateTasks的类型从[String: String]改为[String: Any]

var dictUpdateTasks = [String: Any]()

【讨论】:

  • if((self.dictUpdateTasks["dateDay"]?.isEmpty ?? true)) 给出问题 'Any' 类型的值没有成员 'isEmpty'
  • 您必须在需要时将其从Any 转换回String[String]
  • isEmpty 可分别用于字符串和数组。没有包含 isEmpty 的通用协议。在这种情况下,您需要将值显式转换为 String 或 [String]。
  • @iPhone7 我在这里提出的一个问题是,为什么要将 String 和 [String] 类型都添加到 Dictionary 中。请解释上下文。
  • @PGDev 任务要求,我必须添加键:值以及键:数组。就像我们也可以在目标 c 中做同样的事情
【解决方案2】:

如果您正在寻找类似使用String[String]isEmpty 属性来检查值是否存在的东西,在更高级别上,您可以为此单独创建一个协议。但对于这种情况,我不建议这样做。

protocol EmptyIdentifiable {
    var isEmpty: Bool { get }
}

extension String: EmptyIdentifiable { }
extension Array: EmptyIdentifiable where Element == String { }

var dictionary = [String: EmptyIdentifiable]()
dictionary["string"] = "value"
dictionary["array"] = ["values1", "values2"]

print(dictionary["string"]?.isEmpty)
print(dictionary["array"]?.isEmpty)

当前情况下的正常解决方案是使用从AnyString[String] 的转换。

if let array = dictionary["array"] as? [String] {
    print(array, array.isEmpty)
}
if let string = dictionary["string"] as? String {
    print(string, string.isEmpty)
}

【讨论】:

  • 感谢您增加我的知识
【解决方案3】:

这是创建字典的正确方法。

正确的语法

var dictUpdateTasks = [String: Any]()

您已经使用[String: String]() 创建了一个字典,并且您被分配了String Array arrAddSteps 而不是String。

【讨论】:

    【解决方案4】:

    请试试这个:

    需要让你的字典类型 [String : Any]() 而不是 [String : String]()

    在你的情况下,它只接受字符串类型的值

    var dictUpdateTasks = [String: Any]()
    var arrAddSteps = [String]()
    
    self.dictUpdateTasks["dDay"] = self.btnAddDate.titleLabel?.text
    self.dictUpdateTasks["rem"] = self.btnRemindMe.titleLabel?.text
    self.dictUpdateTasks["steps"] = arrAddSteps
    
    print(self.dictUpdateTasks)
    

    【讨论】:

      【解决方案5】:

      您必须使用键值对将字符串分配给字典。

      【讨论】:

        猜你喜欢
        • 2015-01-13
        • 1970-01-01
        • 2021-10-29
        • 2018-04-25
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 2013-01-02
        • 1970-01-01
        相关资源
        最近更新 更多