SKSpriteKitのuserDataプロパティを使用して、次の行をグリッドのx座標とy座標をノードに添付しました。変数をキーとして使用してスウィフト辞書にアクセスする
node.userData = ["x": x, "y": y]
私はtouchesBegan
を使用して、この機能にデータを送信しています。
func touched(userData: NSDictionary) {
print(userData)
}
コンソールは、必要なデータを正常に印刷します。この辞書を使用して...私は、その後使用して、関連するキーペアを取得したい
var dictionary: [AnyHashable : Any] = [1: "Test1",
2: "Test2",
3: "Test3",
4: "Test4",
5: "Test5",
6: "Test6",
7: "Test7"
]
:
dictionary[userData["x"]]
は、しかし、私は次のエラーを取得する:
Cannot subscript a value of type 'NSDictionary' with an index of type 'String'
なぜSwiftで「NSDictionary」を使用していますか?適切なタイプのSwift辞書を使用してください。なぜあなたは '[Int:String]'を使うべきなのですか? 'AnyHashable'と' Any'で 'dictionary'変数を宣言するのはなぜですか? – rmaddy
ここでrmaddyがどこに向かうのかを再考するために、 'Any *'型と 'NSDictionary'(' Any * '型に橋渡しする)の使用は、ほとんど常にこのようなキャストの問題と型の不一致を引き起こすでしょう。特別なケース(特にObjCへのブリッジ)に対処するために、「Any」とその親が存在します。それらは汎用ツールではありません。型を意図したもの(この場合は '[Int:String]')のみを使用すれば、コンパイラがあなたのために処理します。 –
私はそれを変換しようとしましたが、SpriteKitのuserDataはSwift辞書の代わりにNSDictionaryとして与えられています。私は辞書の変数を[Int:String]に変更しましたが、まだ同じエラーが発生しています – user7732807