在 Swift 3 中获取字典的值,哪个键不是字符串

Posted

技术标签:

【中文标题】在 Swift 3 中获取字典的值,哪个键不是字符串【英文标题】:Get value of Dictionary in Swift 3 which key isn't a String 【发布时间】:2016-11-24 02:23:58 【问题描述】:

我有一个使用 NSIndexPath 作为键的字典。它适用于 Swift 2,但我找不到使其适用于 Swift 3 的解决方案。我不想使用 String 作为键,所以请不要建议它。

// init
fileprivate var cachedCellSizes: [NSIndexPath: CGSize] = [:] 

// get value 
if let size = cachedCellSizes[indexPath] 
    return size

编译器错误:

Ambiguous reference to member 'subscript'

我尝试过的一些解决方案但不起作用:

if let size:CGSize = cachedCellSizes[indexPath] as? CGSize 
    return size

if let size:CGSize = cachedCellSizes[indexPath] as! CGSize 
    return size

if let size:CGSize = cachedCellSizes["indexPath"] as CGSize 
    return size

【问题讨论】:

请检查您的 indexPath 实际上是 NSIndexPath。 Coz Swift 3 在表委托方法中使用IndexPath(不是NSIndexPath)。如果是这样,您可以使用if let size = cachedCellSizes[indexPath as! NSIndexPath] 或将字典键更改为IndexPath 【参考方案1】:
fileprivate var cachedCellSizes: [NSIndexPath: CGSize] = [:]

if let size = cachedCellSizes[indexPath as NSIndexPath] 
    print(indexPath)

fileprivate var cachedCellSizes: [IndexPath: CGSize] = [:]

if let size = cachedCellSizes[indexPath] 
    print(indexPath)

【讨论】:

第二种方法更可取。 @AlexanderMomchliov 是对的,第二个更可取,因为您使用的是 Swift 3。

以上是关于在 Swift 3 中获取字典的值,哪个键不是字符串的主要内容,如果未能解决你的问题,请参考以下文章

检查一个键是不是存在并且它的值不是 Python 字典中的空字符串

Swift 3 - 通过数组索引访问项目键值

如何获取我在 python 中创建的字典中的值,而不是字符串?

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值