Swift 使用枚举登录
我正在尝试创建一种简单的登录用户的方法,但是目前它似乎不起作用。我在Swift 使用枚举登录,swift,enums,Swift,Enums,我正在尝试创建一种简单的登录用户的方法,但是目前它似乎不起作用。我在.Email(logiuser) 您在代码中犯了几个错误,下面是固定版本: enum LoginProvider { case Facebook case Email(LoginUser) // note that LoginUser is used as Type here func login() { switch self { // And here, login
.Email(logiuser)
您在代码中犯了几个错误,下面是固定版本:
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
}
}
我还建议您查看中有关关联值的章节。我在Playerd上检查了您的代码,并做了一些更改以修复错误。它们是1<代码>案例电子邮件(登录用户)和2。缺少
默认值:
登录提供程序的登录()
中的大小写
你做了这些改变,我相信这会解决问题。
以下是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()
此处的开关
至少需要一个其他案例才能使其详尽无遗。我还建议使用email.characters.count over email!="" :)
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()