I have a grid full of a custom view I've created. I can easily loop through it using for (item in grid) {}
and I can then set things such as onClick etc.
However, my custom View has it's own functions which I would like to access and kotlin has no way of knowing item is always going to be type CustomView (It definitely will be though) so I wanted to do something like:
for (item in grid as CustomView) {
item.customFun()
}
I must be missing something here because it gets marked with this cast can never succeed, but I just need kotlin to know this will always be a CustomView
CodePudding user response:
Here for (item in grid as CustomView)
, you've used grid as CustomView
that is trying to cast the grid
as a CustomView
, which is why the compiler is complaining this cast can never succeed
.
You have to cast the item inside the body of the for loop
for (item in grid) {
(item as CustomView).customFun()
}
as
is an unsafe cast operator, which would throw exception
when item won't be an instance of CustomView
. There you can use is
for type checking.
for (item in grid) {
when(item) {
is CustomView -> item.customFun()
}
}