Ios 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

试图用swift中字典中的键的字符串填充数组

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) }