> On 7 Apr 2016, at 14:17, Brent Royal-Gordon <[email protected]> wrote:
> 
>> As I understand it, the proposal is that `Self` can be used as an alias to 
>> `self.dynamicType`, which is an object in the sense of entity in Swift but 
>> not an instance of a class or struct. 
> 
> You don't understand it correctly.

Having read your email, I’m pretty sure I do, and my problem with it remains.

> 
> 
> `Self` isn't supported in value types because, since you can't subclass value 
> types, it always means exactly the same thing as writing the type's name. 
> `Self` also isn't supported in the bodies of class members because, when you 
> call members on it, it's equivalent to `self.dynamicType`. This is actually 
> really strange, though, because it means that you can't actually write 
> certain types explicitly. For instance:
> 
>       class Foo { 
>           func foo() -> Self { 
>               let new = self.dynamicType.init()
>               // `new` is of type Self, but you can't actually write `let 
> new: Self`
>               return new 
>           } 
>           required init() {} 
>       } 


It’s not _really_ strange. The type of new cannot be known at compile time, 
only that it is some subclass of Foo (or Foo itself of course).

> 
> What this proposal is saying is:
> 
> * `Self` will be allowed in value types. It will always mean the same thing 
> as writing the type's name explicitly, but that's okay; it's more readable.

Is it more readable? Has anybody done any objective testing?

> * `Self` will be allowed in member bodies. This will allow you to write that 
> `new` line as:
> 
>               let new: Self = Self()

And that is certainly not more readable than the line it replaces. The line it 
replaces tells me explicitly that I am creating a new object of the same type 
as self. This does not. The casual reader might easily assume that you will get 
an object of type Foo. 


> 
> People seem to be okay with things like `var string: String`; having `self` 
> be of type `Self` is no different.

I’m not wild about that either (especially as my autocomplete seems to go for 
the type before the variable every time) and if you used a variable called 
`string` in the same context as a lot of static methods on `String` it would 
suffer from the same problem that I am concerned about wrt readability.


> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to