编辑代码

//2021.6.28

// 调试时强行终止代码运行
// fatalError()

// 创建密码错误
enum PasswordError: Error {
    case notLongEnough
}

// 验证新建密码是否满足长度要求
func validatePassword(_ password: String) throws -> Bool {
    if password.count < 6 {
        throw PasswordError.notLongEnough
    }
    return true
}

var password = "64190"
var password2 = "6419091"

// do-try-catch 写法,密码 64190 的运行结果是 [密码需要至少6位数]
// do 不是声明是运行、调用 
// try的作用 1:验证返回值是否为真  2:对throw语句返回的Error协议枚举进行抛出传递
// catch为处理错误的分支
do {
    try validatePassword(password)
    print("密码有效")
} catch PasswordError.notLongEnough {
    print("密码需要至少 6 位数")
}

// try? 写法则不具备添加额外代码的地方,主要用于获取该函数的返回值 nil和true
// 遇到复杂错误 处理方式会比较单一冗长
if let validatePassword = try? validatePassword(password2) {
    print("验证结果是 \(validatePassword),密码有效")
} else {
    print("密码需要至少 6 位数")
}

// try! 写法,运行函数,但彻底忽视错误 try不具备调用效果
try! validatePassword(password2)

/*
与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。
与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。
你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。
{
    闭包处理
}
*/