如何将 [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)
目前这种情况下的正常解决方案是使用从 Any
到 String
或 [String]
.
的转换
if let array = dictionary["array"] as? [String] {
print(array, array.isEmpty)
}
if let string = dictionary["string"] as? String {
print(string, string.isEmpty)
}
请在下面找到正确理解的代码:
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)
目前这种情况下的正常解决方案是使用从 Any
到 String
或 [String]
.
if let array = dictionary["array"] as? [String] {
print(array, array.isEmpty)
}
if let string = dictionary["string"] as? String {
print(string, string.isEmpty)
}