I'm not sure I understood everything, but I do see that the current situation, ie these two:
for v in optInts { print("still wrapped: ", v ?? ".none") }
for var v in optInts { print("still wrapped (and mutable):", v ?? ".none") }
would not make sense with:
for let v in optInts { print("unwrapped:", v) }
I think aligning it with if, like the following, would make more sense though, for convenience and simplicity:
for v in optInts { print("still wrapped: ", v ?? ".none") }
for var v in optInts { print("unwrapped (and mutable):", v, "just like if var v = …") }
for let v in optInts { print("unwrapped: ", v, "just like if let v = …") }
or even better, require an explicit ? to unwrap, because doing it implicitly is potentially confusing (where did the .some(…) go?) and complicates the rules, then we would have:
for v? in optInts { print("uwrapped: ", v) }
for var v? in optInts { print("unwrapped (and mutable):", v) }
for let v? in optInts { print("unwrapped: ", v) }
and also require it for if statements.
EDIT: So can this inconsistency be fixed, or why exactly can't it?