如何将 [String] 数组添加到字典

How to add array of [String] to dictionary

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

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?'

请指导。谢谢

原因:

dictUpdateTasks[String:String] 类型,即它只能接受 String.

类型的值
dictUpdateTasks["steps"] = arrAddSteps

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

解法:

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

var dictUpdateTasks = [String: Any]()

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

下面是创建字典的正确方法。

语法正确

var dictUpdateTasks = [String: Any]()

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

请试试这个:

需要将字典类型设置为 [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)

如果您正在寻找类似通过使用 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)
}