Yes, that’s exactly what I’m suggesting. The use of Indexer should be exceptionally rare, used by low-level code like UnsafePointer, but not by common application level types like List.
There is an active discussion about what to do about that. I’m not sure the final outcome and I believe the discussion hasn’t converged, but I find it likely that it will be removed entirely. It is an active performance problem for signed types as you say, and signed types aren’t going away even if unsigned types were to be allowed.
The point is that you shouldn’t be using UInt for random integer values that are positive-only. Where did you get something of UInt type if everything returns Int.
That’s not the case: Apple watch is 32-bit (specifically “ILP32” where sizeof(Int) and sizeof(pointer) is 32-bit), even when the CPU is 64-bit (more nerdery if you’re interested). Beyond that, Swift has other supported (now obsolete) 32-bit devices. Swift also supports 32-bit linux and other systems.
The answer is no, the behavior changes, just like when you use ssize_t in C/C++. This isn’t related to the discussion or Int vs UInt though - UInt has the same behavior just at different thresholds.
-Chris