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

var componentArray: [String]

let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys

这将返回一个错误:'AnyObject'与string不相同

也试过

componentArray = dict.allKeys as String 

but get: 'String'不能转换为[String]


当前回答

来自Array Apple官方文档:

init(_:) -创建一个包含序列元素的数组。

宣言

Array.init<S>(_ s: S) where Element == S.Element, S : Sequence

参数

s -要转换为数组的元素序列。

讨论

You can use this initializer to create an array from any other type that conforms to the Sequence protocol...You can also use this initializer to convert a complex sequence or collection type back to an array. For example, the keys property of a dictionary isn’t an array with its own storage, it’s a collection that maps its elements from the dictionary only when they’re accessed, saving the time and space needed to allocate an array. If you need to pass those keys to a method that takes an array, however, use this initializer to convert that list from its type of LazyMapCollection<Dictionary<String, Int>, Int> to a simple [String].

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"]"

其他回答

数组从字典键在Swift

componentArray = [String] (dict.keys)
dict.keys.sorted() 

给出[String] https://developer.apple.com/documentation/swift/array/2945003-sorted

来自Array Apple官方文档:

init(_:) -创建一个包含序列元素的数组。

宣言

Array.init<S>(_ s: S) where Element == S.Element, S : Sequence

参数

s -要转换为数组的元素序列。

讨论

You can use this initializer to create an array from any other type that conforms to the Sequence protocol...You can also use this initializer to convert a complex sequence or collection type back to an array. For example, the keys property of a dictionary isn’t an array with its own storage, it’s a collection that maps its elements from the dictionary only when they’re accessed, saving the time and space needed to allocate an array. If you need to pass those keys to a method that takes an array, however, use this initializer to convert that list from its type of LazyMapCollection<Dictionary<String, Int>, Int> to a simple [String].

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"]"

你可以用字典。这样的地图:

let myKeys: [String] = myDictionary.map{String($0.key) }

解释: Map遍历myDictionary并接受每个键和值对为$0。从这里你可以得到0美元。Key或$0.value。在后面的闭包{}中,可以转换每个元素并返回该元素。因为你想要$0,你想要它作为一个字符串,然后你转换使用string ($0.key)。将转换后的元素收集到字符串数组中。

斯威夫特和斯威夫特

componentArray = Array(dict.keys) // for Dictionary

componentArray = dict.allKeys // for NSDictionary