Swift 枚举 关联值 以及 Error 的用法

172 阅读1分钟

大佬笔记

  • 枚举
enum Country {
    case mond       // 蒙德
    case liyue      // 璃玥
    case ricewife   // 稻妻
    case sumeru     // 须弥
}

var country = Country.mond
switch country {
    case .mond:
        print("蒙德")
    case .liyue:
        print("璃玥")
    case .ricewife:
        print("稻妻")
    case .sumeru:
        print("须弥")
}
  • 遵循 CaseIterable
enum Country:CaseIterable {
    case mond       // 蒙德
    case liyue      // 璃玥
    case ricewife   // 稻妻
    case sumeru     // 须弥
}
// 获取枚举的所有类型
Country.allCases
  • 关联值
enum Country {
    case attribute(String,String)
    case demongod(String,String)
}

var country = Country.attribute("稻妻", "雷之国")
country = .demongod("枫丹", "芙宁娜")
switch country {
    case .attribute(let countryName, let attribute):
        print("\(countryName) - \(attribute)")
    case .demongod(let countryName, let demonName):
        print("\(countryName) 神明属性:\(demonName)")
}
  • Error的基本使用
// 枚举构建错误类型
enum AllError:Error {
    case errorA
    case errorB
    case errorC
}

// 遵循LocalizedError协议 根据自定义的error类型 扩展描述信息
extension AllError:LocalizedError {
    var errorDescription: String? {
        switch self {
        case .errorA:
            return "第一个错误..."
        case .errorB:
            return "第二个错误..."
        case .errorC:
            return "第三个错误..."
        }
    }
}

// 遵循CustomNSError 不根据自定义error的类型
extension AllError:CustomNSError {
    var errorCode: Int {
        return 404
    }
}
  • 定义一个函数
func loginError(username:String?) throws {
    if username == nil {
        throw AllError.errorA
    }
    print("走下一步")
}
  • do catch 来使用
do {
    try loginError(username: nil)
} catch {
    let cError = error as? CustomNSError
    debugPrint(cError?.errorCode ?? 0)
}
// 404

do {
    try loginError(username: nil)
} catch {
    debugPrint(error.localizedDescription)
}
// 第一个错误...