在 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 字典中的空字符串