Cool.  Thanks for your comment.  Done.  

https://bugs.swift.org/browse/SR-5581 <https://bugs.swift.org/browse/SR-5581>

Ray


> On Jul 29, 2017, at 5:55 PM, Slava Pestov <spes...@apple.com> wrote:
> 
> What you’re trying to do should be equivalent to this:
> 
> protocol Toggling : Equatable {
>   …
> }
> 
> It’s a bug that placing the constraint on ‘Self’ does not have the same 
> effect though; do you mind filing a JIRA?
> 
> Slava
> 
>> On Jul 29, 2017, at 12:24 PM, Ray Fix via swift-users <swift-users@swift.org 
>> <mailto:swift-users@swift.org>> wrote:
>> 
>> Hi,
>> 
>> I had a question about defining protocols. Originally I wrote:
>> 
>> protocol Toggling where Self: Equatable {
>>   static var all: [Self] { get }
>>   func toggled() -> Self
>>   mutating func toggle()
>> }
>> 
>> extension Toggling {
>> 
>>   func toggled() -> Self {
>>     let current = Self.all.index(of: self) ?? 0
>>     let next = (current + 1) % Self.all.count
>>     return Self.all[next]
>>   }
>> 
>>   mutating func toggle() {
>>     self = toggled()
>>   }
>> }
>> 
>> This resulted in a bunch of errors.  
>> 
>> Playground execution failed:
>>                          ^
>> error: Toggler.playground:7:28: error: cannot invoke 'index' with an 
>> argument list of type '(of: Self)'
>>     let current = Self.all.index(of: self) ?? 0
>>                            ^
>> 
>> Toggler.playground:7:28: note: expected an argument list of type '(of: 
>> Self.Element)'
>>     let current = Self.all.index(of: self) ?? 0
>> 
>> This approach worked:
>> 
>> 
>> protocol Toggling {
>>   static var all: [Self] { get }
>>   func toggled() -> Self
>>   mutating func toggle()
>> }
>> 
>> extension Toggling where Self: Equatable {
>> 
>>   func toggled() -> Self {
>>     let current = Self.all.index(of: self) ?? 0
>>     let next = (current + 1) % Self.all.count
>>     return Self.all[next]
>>   }
>> 
>>   mutating func toggle() {
>>     self = toggled()
>>   }
>> }
>> 
>> This version is probably better anyway but I am wondering if the first 
>> approach should have shown an error at the point of trying to attach the 
>> constraint to the protocol declaration.  Any insights on this?
>> 
>> Thank you,
>> Ray  Fix
>> 
>> 
>> 
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org <mailto:swift-users@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users
> 

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

Reply via email to