>> See my example with the tableView and the UITableViewDelegate on 
>> UITableViewController. `if let x = x` isn't the usual case. The usual case 
>> is that you have e.g. tableView instance on the class and a method that 
>> takes a tableView parameter.
> That would be shadowing.

Yes, of course. But if you mark shadowing as error/warning, you need to update 
dozens if not hundreds of places in your projects since most default argument 
names in UITableViewController shadow the tableView instance variable.

>> Then you change the method signature not to include the parameter and the 
>> code still compiles, since the tableView reference now goes to the instance 
>> variable, which is wrong.
> If the annotation/keyword behaved similar to ‘override’, then you would 
> either have a shadowing warning before saying that there was shadowing, or 
> afterward saying that you are using the annotation/keyword when shadowing 
> isn’t happening.

That was just an example - I've written in another email here that the issue I 
was describing occurred during refactoring a larger method into smaller ones - 
you retype the code, you copy-paste it. And since reference to an instance 
variable without refering to self is fine, it may compile even though the 
semantics changed.

> 
>> 
>> I agree that shadowing variables is not a good idea, but I stand by my point 
>> that it's potentially dangerous and error-prone to allow accessing instance 
>> variables without `self`.
>> 
>> Krystof
>> 
> 
> -DW
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to