不能使用索引类型为'String'的索引对'Dictionary <key,value =“”>'类型的值下标self [key]

时间:2019-05-21 19:42:20

标签: swift

我有类型为Dictionary(键,值)的Dictionary。当我尝试访问该值时,出现错误:

  

不能用索引类型为'String'self [key]的索引对类型为'Dictionary'的值进行下标

我的班级。

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 个答案:

答案 0 :(得分:3)

根据您上面的问题构建的以下内容在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

所以回答您的问题应该可以。

答案 1 :(得分:0)

我知道了。实际上,就我而言,代码就是这样

var dictionary = [String:AnyObject]()

因此,当它获取Int值时,它会抛出错误。

这解决了问题。

var dictionary = [String:Any]()