Skip to content

Instantly share code, notes, and snippets.

@efremidze
Forked from gavrix/Example.swift
Last active October 30, 2017 08:21
Show Gist options
  • Save efremidze/eaec847d1fb96e348921072622685a24 to your computer and use it in GitHub Desktop.
Save efremidze/eaec847d1fb96e348921072622685a24 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() -> LoginProvider
}
enum AppLoginProviders {
case Email(email: String, password: String)
case Facebook
}
extension AppLoginProviders: LoginProviderConvertible {
func toLoginProvider() -> LoginProvider {
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(AppLoginProviders.Email(email: "email", password: "password"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment