Skip to content

Instantly share code, notes, and snippets.

@gavrix
Last active April 29, 2016 20:30
Show Gist options
  • Save gavrix/ccf897308eb93d15cf3e2b1199a0e6ba to your computer and use it in GitHub Desktop.
Save gavrix/ccf897308eb93d15cf3e2b1199a0e6ba to your computer and use it in GitHub Desktop.
protocol LoginProvider {
func login()
}
class EmailLoginProvider: LoginProvider {
var email: String
var password: String
init(email: String, password: String) {
self.email = email
self.password = password
}
func login() {
print("loggin in using email \(self.email)")
}
}
class FacebookLoginProvider: LoginProvider {
func login() {
print("logging in with facebook")
}
}
protocol LoginProviderConvertible {
func toLoginProvider() -> LogginProviderConvertible
}
enum AppLoginProviders {
case Email(email: String, password: String)
case Facebook
}
extension AppLoginProviders: LoginProviderConvertible {
func toLoginProvider() -> LogginProviderConvertible {
switch(self) {
case .Email(let email, let password): return EmailLoginProvider(email: email, password: password)
case .Facebook: return FacebookLoginProvider()
}
}
}
func performLogin(loginProvider: LoginProvider) {
loginProvider.login()
}
func performLogin(loginProviderConvertible: loginProviderConvertible) {
performLogin(loginProviderConvertible.toLoginProvider())
}
performLogin(FacebookLoginProvider())
performLogin(.Email(email: "email", password: "password"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment