swift - 使用枚举登录

标签 swift enums

我正在尝试创建一种简单的用户登录方式,但目前它似乎不起作用。我不断收到错误消息,并在 .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 != ""
    }

}

最佳答案

你在代码中犯了一些错误,这是修复后的版本:

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 中有关关联值的章节.

关于swift - 使用枚举登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625019/

相关文章:

ios - swift 3 : Create UIImage from UIBezierPath

ios - 将枚举变量转换为 anyObject - ios with swift

ios - 从特定单元格获取开关状态

swift - 从 swift 协议(protocol)中存储/传递函数类型

xcode - 使用 NSURLSession 连接到具有无效证书的服务器(swift2、xcode7、ios9)

ios - 缺少所需的模块 'libxml2'

python - 为什么Python枚举成员具有所有成员作为属性的无限递归?

ruby-on-rails-3 - 迁移以在 Rails3 和 enumerated_attribute 中添加枚举列

c# - C#枚举默认实现了哪些接口(interface)

C# TypeConverter long 到枚举类型在 ChangeType 上失败