2016-11-24 11 views
-1

辞書にNSIndexPathをキーとして使用しています。 Swift 2ではうまく動作しますが、Swift 3で動作させるための解決策を見つけることができません。私はStringをキーとして使用したくないので、提案しないでください。キーが文字列ではないSwift 3のDictionaryの値を取得

// 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 
} 
+3

番目のを確認してくださいあなたのindexPathでは、実際には 'NSIndexPath'です。 Coz Swift 3は、テーブルデリゲートメソッドで 'IndexPath'(NSIndexPathではなく)を使用します。そうであれば 'if let size = cachedCellSizes [indexPath as! NSIndexPath] 'または辞書のキーを' IndexPath'に変更してください – RJE

答えて

1
fileprivate var cachedCellSizes: [NSIndexPath: CGSize] = [:] 

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

OR

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

if let size = cachedCellSizes[indexPath] { 
    print(indexPath) 
} 
+1

第1のものが私の問題を解決しました、ありがとうございます! – HoangNA

+1

第2の方法が好ましい。 – Alexander

+0

@AlexanderMomchliovが正しいです。スイフト3を使用しているので、2番目の方が望ましいです。 – Callam

関連する問題