Accessing Swift dictionary using variable as key -
using skspritekit's userdata property, have used following line attach x , y co-ordinates on grid, node.
node.userdata = ["x": x, "y": y] i using touchesbegan send data function.
func touched(userdata: nsdictionary) { print(userdata) } the console prints data required. using dictionary...
var dictionary: [anyhashable : any] = [1: "test1", 2: "test2", 3: "test3", 4: "test4", 5: "test5", 6: "test6", 7: "test7" ] i want retrieve relevant key-pair using:
dictionary[userdata["x"]] however, following error:
cannot subscript value of type 'nsdictionary' index of type 'string'
this classic case of misleading diagnostic due any casting.
just simplify problem (and rid of spritekit):
let userdata: nsdictionary = ["x": 1, "y": 2] let dictionary = [1: "test1", 2: "test2", 3: "test3", 4: "test4", 5: "test5", 6: "test6", 7: "test7" ] dictionary[userdata["x"]] the diagnostic is:
cannot subscript value of type 'nsdictionary' index of type 'string' but that's not problem. main problem userdata["x"] returns optional (any?). optional keep working. any? bizarro-type creates kinds of problems swift. (because any? any, , any can trivially promoted any?. any, any?, any??, any???, etc. interchangable types. it's bit of mess , creates lot of confusion.)
the compiler goes looking subscript takes string , returns int, , can't find it. rolls diagnostic string being problem, very, roundabout way true, isn't expecting.
you need makes sure have int here, , exists. 1 example:
if let x = userdata["x"] as? int { dictionary[x] // "test1" }
Comments
Post a Comment