我有类型为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
}
}
答案 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]()