Hello! Here is a class that uses all of this protocols: https://gist.github.com/rabbitinspace/a88410d778e5ac955ee88bdfede6e00b <https://gist.github.com/rabbitinspace/a88410d778e5ac955ee88bdfede6e00b> Line 19
Latest Xcode gives me this log: https://gist.github.com/rabbitinspace/6cb5ebd536a81b0b1cc6b0fadbabbe77 <https://gist.github.com/rabbitinspace/6cb5ebd536a81b0b1cc6b0fadbabbe77> It’s a compiler crash, I think While the latest dev swift snapshot produces a build error: https://gist.github.com/rabbitinspace/944a62efc18432baf781e368a1023b87 <https://gist.github.com/rabbitinspace/944a62efc18432baf781e368a1023b87> Shortly: cannot invoke 'authenticationService' with an argument list of type '(for: Remote.Type)’ expected an argument list of type '(for: Remote.Type)’ I can build it with the latest dev snapshot (Xcode still can't) if I will constraint generic types in AuthController class: Can’t compile: final class AuthController<Remote: App.Remote, Builder: RemoteAuthenticationServiceBuilder> This is compiles successfully: final class AuthController<Remote: App.Remote, Builder: RemoteAuthenticationServiceBuilder> where Builder.Service.Remote == Remote > 25 дек. 2016 г., в 23:50, Slava Pestov via swift-users > <swift-users@swift.org> написал(а): > > Hi Igor, > > Your example is not self-contained, so I added the following definitions: > > struct URI {} > > struct App { > class Remote { > struct Credentials {} > } > } > > struct RemoteUser {} > > protocol ResponseRepresentable {} > > protocol RemoteCredentials {} > > Unfortunately, this makes the code compile in both Swift 3.0 and the latest > code built from GitHub, even with the ‘where’ part uncommented, so I suspect > we’ll need a larger testcase to reproduce the original issue. > > However from looking at the code, what you’re doing is adding a requirement > to an associated type of the ‘Self’ generic parameter, which Swift 3.0 did > not model properly, but it is one of the things we addressed in some recent > refactoring work. > > Could you try the latest development snapshot from swift.org > <http://swift.org/> and let us know if it solves your problem? > > Slava > >> On Dec 25, 2016, at 1:05 PM, Игорь Никитин via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> Hello! >> >> I have few protocols with associated types: >> protocol Remote { >> associatedtype Credentials: RemoteCredentials >> >> static var url: URI { get } >> static var name: String { get } >> static var credentials: Credentials.Type { get } >> } >> protocol RemoteAuthenticating { >> associatedtype Remote: App.Remote >> >> func authenticate(with credentials: Remote.Credentials) throws -> >> (RemoteUser, ResponseRepresentable?) >> } >> protocol RemoteAuthenticationServiceBuilder { >> associatedtype Service: RemoteAuthenticating >> >> // TODO: `Service.Remote` should be constrained to `Remote` but compiler >> crashes >> func authenticationService<Remote: App.Remote>(for: Remote.Type) -> >> Service? // where Service.Remote == Remote >> } >> It works fine until I uncomment the last where statement >> If I trying to constraint Service.Remote type compiler will crash with >> segfault 11 >> I can guess that it's a compiler bug, but maybe I’m using generics in wrong >> way? >> >> _______________________________________________ >> 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
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users