Ios swift中字典键的数组
试图用swift中字典中的键的字符串填充数组Ios swift中字典键的数组,ios,arrays,xcode,dictionary,swift,Ios,Arrays,Xcode,Dictionary,Swift,试图用swift中字典中的键的字符串填充数组 var componentArray: [String] let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!) componentArray = dict.allKeys 这将返回一个错误:“AnyObject”与字符串不相同 也试过 componentArray = dict.a
var componentArray: [String]
let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys
这将返回一个错误:“AnyObject”与字符串不相同
也试过
componentArray = dict.allKeys as String
但是get:'String'不能转换为[String]
dict.allKeys
不是字符串。它是一个[String]
,正如错误消息所告诉您的(当然,假设键都是字符串;这正是您所说的)
因此,首先键入
componentArray
作为[AnyObject]
,因为它是在Cocoa API中键入的,或者,如果您在Swift中从字典键中键入dict.allKeys
,则将其转换为[String]
,因为这就是您键入componentArray
数组的方式
componentArray = [String] (dict.keys)
Swift 3和Swift 4
componentArray = Array(dict.keys) // for Dictionary
componentArray = dict.allKeys // for NSDictionary
对于Swift 3,
字典
有一个属性<代码>键具有以下声明:
var keys: LazyMapCollection<Dictionary<Key, Value>, Key> { get }
从
[String:Int]
到[String]
下面的代码以更一般的方式展示了如何使用带有字符串键和整数值([String:Int]
)的字典中的键
属性获取字符串数组([String]
):
从
[Int:String]
到[String]
下面的代码显示了如何使用带有整数键和字符串值([Int:String]
)的字典中的键
属性获取字符串数组([String]
):
扩展数组{
public function to字典(使用selectKey:(元素)->Key)->[Key:Element]{
var dict=[Key:Element]()
自我元素{
dict[selectKey(element)]=元素
}
返回指令
}
}
此答案适用于带字符串键的swift字典像下面的这个
let dict: [String: Int] = ["hey": 1, "yo": 2, "sup": 3, "hello": 4, "whassup": 5]
这是我要用的分机
extension Dictionary {
func allKeys() -> [String] {
guard self.keys.first is String else {
debugPrint("This function will not return other hashable types. (Only strings)")
return []
}
return self.flatMap { (anEntry) -> String? in
guard let temp = anEntry.key as? String else { return nil }
return temp }
}
}
我以后会用这个拿到所有的钥匙
let componentsArray = dict.allKeys()
NSDictionary是类(通过引用传递) 字典是结构(按值传递) ======来自NSDictionary的数组====== NSDictionary具有所有键和所有值使用 键入[Any]
let dict: [String: Int] = ["hey": 1, "yo": 2, "sup": 3, "hello": 4, "whassup": 5]
=======字典中的数组=====
苹果对字典的键和值的参考。
这就给了[字符串]
来自官方:
init(:)
-创建包含序列元素的数组
宣言
Swift 5
var dict = ["key1":"Value1", "key2":"Value2"]
let k = dict.keys
var a: [String]()
a.append(contentsOf: k)
这对我很有用。你可以像这样使用dictionary.map:
let myKeys: [String] = myDictionary.map{String($0.key) }
解释如下:
Map在myDictionary中迭代,并将每个键和值对接受为$0。从这里您可以获得$0.key或$0.value。在尾部闭包{}中,可以转换每个元素并返回该元素。因为您想要$0,并且希望它作为字符串,所以可以使用字符串($0.key)进行转换。将转换后的元素收集到字符串数组中 有趣的是,在dict.allKeys中的for-for-name循环中,“name”变成了一个字符串,可以打印或以其他方式处理。dict没有keys方法。它是NSDictionary的一个实例,而不是Dictionary.dict.map{$0.key}这似乎不再正确。在Swift 4.2中,dict.keys(替换.allKeys)不是[String],它是[Dictionary.keys],在分配给[String]类型的变量之前必须强制转换@santo似乎有最简单的工作示例来说明如何执行此操作。感谢您提供的详细信息。在Swift 4.x中,类型是
Dictionary.Keys
-您是否了解我们何时使用该类型以及如何使用该类型?嘿!虽然这个代码片段可能是解决方案,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。我不知道,为什么人们不喜欢速记语法,因为它更容易理解。我无法告诉您您为我解决了多少手写问题。谢谢
let componentsArray = dict.allKeys()
let objesctNSDictionary =
NSDictionary.init(dictionary: ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"])
let objectArrayOfAllKeys:Array = objesctNSDictionary.allKeys
let objectArrayOfAllValues:Array = objesctNSDictionary.allValues
print(objectArrayOfAllKeys)
print(objectArrayOfAllValues)
let objectDictionary:Dictionary =
["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]
let objectArrayOfAllKeys:Array = Array(objectDictionary.keys)
let objectArrayOfAllValues:Array = Array(objectDictionary.values)
print(objectArrayOfAllKeys)
print(objectArrayOfAllValues)
dict.keys.sorted()
// Old version (for history)
let keys = dictionary.keys.map { $0 }
let keys = dictionary?.keys.map { $0 } ?? [T]()
// New more explained version for our ducks
extension Dictionary {
var allKeys: [Dictionary.Key] {
return self.keys.map { $0 }
}
}
Array.init<S>(_ s: S) where Element == S.Element, S : Sequence
func cacheImagesWithNames(names: [String]) {
// custom image loading and caching
}
let namedHues: [String: Int] = ["Vermillion": 18, "Magenta": 302,
"Gold": 50, "Cerise": 320]
let colorNames = Array(namedHues.keys)
cacheImagesWithNames(colorNames)
print(colorNames)
// Prints "["Gold", "Cerise", "Magenta", "Vermillion"]"
var dict = ["key1":"Value1", "key2":"Value2"]
let k = dict.keys
var a: [String]()
a.append(contentsOf: k)
let myKeys: [String] = myDictionary.map{String($0.key) }