не может подписать значение типа 'Словарь'с индексом типа' String 'self [key] - PullRequest
0 голосов
/ 21 мая 2019

У меня есть словарь типа словарь (ключ, значение). Когда я пытаюсь получить доступ к значению, оно выдает ошибку:

не может индексировать значение типа «Словарь» с индексом типа «Строка» self [key]

Мой класс.

extension Dictionary where Key == String {
    public func optionalValue<T>(_ key: String) throws -> T?
    {
        guard let value = self[key],
            !(value is NSNull) else { return nil }
        guard let typedValue = value as? T else { throw JSONParserError.invalidValue(key: key, value: value) }

        return typedValue
    }
}

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

Следующее, построенное из вашего вопроса выше, компилируется и прекрасно работает для меня на игровой площадке с использованием Xcode 10.2.

import Foundation

extension Dictionary where Key == String {

    public func optionalValue<T>(_ key: String) throws -> T? {
        guard let value = self[key] else { return nil }
        guard !(value is NSNull) else { return nil }
        guard let typedValue = value as? T else { throw NSError() }
        return typedValue
    }

}

var dictionary = [String:Any]()
dictionary["nullKey"] = NSNull()
dictionary["intKey"] = 12345

var value: Int?
value = try dictionary.optionalValue("nullKey")
value = try dictionary.optionalValue("intKey")

Строка value = try dictionary.optionalValue("nullKey") выводит nil как ожидалось и value = try dictionary.optionalValue("intKey") выводит 12345.

Поэтому, чтобы ответить на ваш вопрос, он должен работать нормально.

0 голосов
/ 23 мая 2019

Я получил вопрос.На самом деле в моем случае код был примерно таким:

var dictionary = [String:AnyObject]()

Так что, когда он получал значение Int, он выдавал ошибку.

Это решило проблему.

var dictionary = [String:Any]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...