Попытка заполнить массив строками из ключей в словаре в swift.
var componentArray: [String]
let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys
Это возвращает ошибку: «AnyObject» не идентичен строке
Также попробовал
componentArray = dict.allKeys as String
но получите: «String» не конвертируется в [String]
С Swift 3,
Dictionary
естьkeys
свойство.keys
имеет следующую декларацию:Обратите внимание , что
LazyMapCollection
это легко может быть сопоставлено сArray
сArray
«Sinit(_:)
инициализатором.От
NSDictionary
к[String]
Следующий
AppDelegate
фрагмент класса iOS показывает, как получить массив строк ([String]
), используяkeys
свойство изNSDictionary
:От
[String: Int]
к[String]
В более общем виде следующий код Playground показывает, как получить массив строк (
[String]
), используяkeys
свойство из словаря со строковыми ключами и целочисленными значениями ([String: Int]
):От
[Int: String]
к[String]
Следующий код Playground показывает, как получить массив строк (
[String]
), используяkeys
свойство из словаря с целочисленными ключами и строковыми значениями ([Int: String]
):источник
Dictionary<String, String>.Keys
ли у вас понимание, когда мы хотим использовать этот тип и как?Массив из словарных ключей в Swift
источник
dict.allKeys
это не строка Это[String]
именно то, о чем говорится в сообщении об ошибке (если, конечно, все ключи являются строками; это именно то, что вы утверждаете, когда говорите это).Итак, либо начните с того, что наберите
componentArray
as[AnyObject]
, потому что это то, как он печатается в API-интерфейсе Какао, либо, если вы разыгрываетеdict.allKeys
, приведите его[String]
, потому что это то, как вы ввелиcomponentArray
.источник
источник
NSDictionary - это класс (передача по ссылке). Словарь - это структура (передача по значению ) ====== Массив из NSDictionary ======
NSDictionary имеет allKeys, а allValues получают свойства с типом [Any] .
====== Array From Dictionary ======
Справочник Apple по ключевым словам и значениям словаря .
источник
это дает [String] https://developer.apple.com/documentation/swift/array/2945003-sorted
источник
Из официальной документации Array Apple :
init(_:)
- Создает массив, содержащий элементы последовательности.декларация
параметры
s - последовательность элементов для превращения в массив.
обсуждение
источник
Вы можете использовать dictionary.map следующим образом:
Объяснение: Карта перебирает myDictionary и принимает каждую пару ключ-значение как $ 0. Отсюда вы можете получить $ 0.key или $ 0.value. Внутри замыкающего замыкания {} вы можете преобразовать каждый элемент и вернуть этот элемент. Так как вы хотите $ 0, и вы хотите его как строку, то вы конвертируете, используя String ($ 0.key). Вы собираете преобразованные элементы в массив строк.
источник
Этот ответ будет для быстрого словаря со строковыми ключами. Как этот ниже .
Вот расширение, которое я буду использовать.
И я получу все ключи позже, используя это.
источник
Swift 5
Это работает для меня.
источник
источник