Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用枚举登录_Swift_Enums - Fatal编程技术网

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()