-1 from me. To me this is not *obvious* as to what "Self" it means. 

And it seems possible to run into this: 
self.someClass.Self

Just looks confusing to me. What's wrong with using "Type" or something more 
obvious?

Sent from my iPad

> On Apr 14, 2016, at 10:28 AM, Vladimir.S via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> +1, I also support. We already have Self in meaning of dynamicType as result 
> of method, for example:
> 
> class A {
>    func some()->Self {
>        //print(self.dynamicType) // btw: if we uncomment this - will get 
> run-time error wtf??
>        return self
>    }
> }
> 
> class B:A {
> }
> 
> var aa = B()
> 
> print(aa.some().dynamicType)
> 
> so why do we need to have this "dynamicType" instead of "Self".
> It seems to be natural to have
> 
> print(aa.some().Self)
> 
> 
>> On 14.04.2016 4:41, Joe Groff via swift-evolution wrote:
>> It's been pitched before, but I don't think we've had a dedicated thread to 
>> this idea. Erica has proposed making `Self` generally available within 
>> methods in types to refer to the dynamic type of the current receiver. One 
>> could think of `Self` as a special associated type member that exists in 
>> every type for this purpose. This also happens to be what you get when ask 
>> for the `dynamicType` member of a value. We could unify these concepts and 
>> get rid of the clunky `dynamicType` keyword, replacing it with `x.Self`.
>> 
>> There's another benefit to this syntax change. Looking to the future, one of 
>> the many features Doug pitched in his generics manifesto was to generalize 
>> protocol existentials, lifting our current restrictions on protocols "with 
>> Self or associated types" and allowing them to be used as dynamic types in 
>> addition to static generic constraints. Once you do this, you often want to 
>> "open" the type of the existential, so that you can refer to its Self and 
>> associated types in the types of other values. I think a natural way would 
>> be to let you directly use Self and associated type members of existentials 
>> as types themselves, for example:
>> 
>>    let a: Equatable = /*...*/
>>    let b: Equatable = /*...*/
>> 
>>    // This is not allowed, since Equatable requires two values with the same 
>> static type, but
>>    // a and b may have different dynamic types.
>>    a == b
>> 
>>    // However, we can dynamically cast one to the other's dynamic type:
>>    if let bAsA = b as? a.Self {
>>        return a == bAsA
>>    }
>> 
>>    let x: RangeReplaceableCollection = /*...*/
>>    let y: Collection = /*...*/
>> 
>>    // If y has the same dynamic Element type as x, append it to x
>>    var z: x.Self = x
>>    if let yAsX = y as? Any<Collection where Element == x.Element> {
>>        z.append(yAsX)
>>    }
>> 
>> `x.Self` then becomes just the first step in this direction.
>> 
>> -Joe
>> _______________________________________________
>> 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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to