2016-02-25 116 views
1

我正在嘗試創建一個簡單的登錄用戶的方法,但目前似乎不起作用。我一直在.Email(LoginUser)使用枚舉登錄

enum LoginProvider { 
    case Facebook 
    case Email(String, String) 

    func login() { 
     switch self { 
     case .Email(LoginUser) where LoginUser.isValid(): 
      break 

     case .Facebook: 

      break 
     } 
    } 

} 

struct LoginUser { 
    let email: String 
    let password: String 
    func isValid() -> Bool { 
     return email != "" && password != "" 
    } 

} 

回答

0

我在操場上檢查了你的代碼,並做了一些修改來修復錯誤。其中有1. case Email(LoginUser)和2.在LoginProviderlogin()中丟失default:個案。

你做出這些改變,我相信它會解決這個問題。 這是playgrund的工作代碼。

struct LoginUser { 

    let email: String 
    let password: String 

    func isValid() -> Bool { 
     return email.characters.count > 0 && password.characters.count > 0 
    } 
} 

enum LoginProvider { 

    case Facebook 
    case Email(LoginUser) 

    func login() { 

     switch self { 

     case .Email(let user) where user.isValid(): 
      print("Login with email") 
      break 

     case .Facebook: 
      print("Login with Facebook") 
      break 

     default: 
      break 
     } 

    } 
} 


let provider: LoginProvider = LoginProvider.Email(LoginUser(email: "email", password: "pass")) 
provider.login() 
+0

我也建議在電子郵件中使用email.characters.count!=「」:) – BLC

1

你已經在你的代碼做了幾個錯誤,獲取和誤差與遺漏的說法,這裏的固定的版本:

enum LoginProvider { 
    case Facebook 
    case Email(LoginUser) // note that LoginUser is used as Type here 

    func login() { 
     switch self { 

     // And here, loginUser is an instance of type LoginUser 
     case .Email(let loginUser) where loginUser.isValid(): 
      break 

     case .Email(let loginUser): 
      // Switch has to be exhaustive, 
      // in this case you should handle invalid user 
      break 

     case .Facebook: 
      break 
     } 
    } 

} 

struct LoginUser { 
    let email: String 
    let password: String 
    func isValid() -> Bool { 
     return !email.isEmpty && !password.isEmpty 
    } 
} 

我也建議你檢查章節在關聯值Apple's Swift book

+0

此處的'switch'至少需要另一個案例才能使其成爲詳盡的。 –

+0

謝謝,我的不好。 –