Доступ к любому хэшу по индексу

#swift #macos #swift3

#быстрый #macos #swift3

Вопрос:

Я новичок в Swift, и я не могу понять, как я могу получить доступ по индексу к переменной типа [AnyHashable : Any]

Чтобы быть более конкретным, я хочу получить доступ allHeaderFields к переменной HTTPURLResponse экземпляра с помощью индекса. Я ожидал, что сработает что-то вроде следующего, но это не сработало:

 httpResponse.allHeaderFields[0]
 

Ответ №1:

В Swift 3 [AnyHashable: Any] это просто тип словаря по умолчанию, импортированный из NSDictionary . Вы можете получить доступ к его содержимому, как к обычному словарю:

 if let contentType = httpResponse.allHeaderFields["Content-Type"] as? String {
    print(contentType)
}
 

Или:

 for (key, value) in httpResponse.allHeaderFields {
    print(key, value)
}
 

Комментарии:

1. Я пытаюсь отобразить все заголовки в NSTableView. Метод, который нужно переопределить для отображения столбца, предоставляет мне номер строки. Я не могу знать имена заголовков априори.

2. @LazarusLazaridis, вы можете легко преобразовать словарь Swift в массив, используя map . let headerArray = httpResponse.allHeaderFields.map{$0} . Или вы можете создать свой собственный массив, изменив мой второй фрагмент кода.

3. Это то, что я делаю в данный момент, я хотел убедиться, что я не делаю это неправильно, потому что я как 2 дня новичок в swift ;). Спасибо за помощь.

4. @LazarusLazaridis, в некоторых случаях (кто-то говорит, что «некоторые» должны быть «многими»), Swift не дает нам супер-простого способа. Удачи вам и вашему приложению.