美文网首页
Swift 小笔记 | 枚举实用小 tips

Swift 小笔记 | 枚举实用小 tips

作者: Lol刀妹 | 来源:发表于2019-11-22 18:51 被阅读0次

    随着对 Swift 的运用愈加娴熟,越来越能感受到 Swift 的魅力。

    场景一

    列表展示枚举数据,用户点击后保存对应的 code 码。

    可以结合元组将所有信息放到枚举中:

    enum ShoesQuality {
        
        case new
        case flaw
        case dressed
        case secondHand
        
        var info: (desc: String, code: Int) {
            get {
                switch self {
                case .new:
                    return ("全新闲置", 100)
                case .flaw:
                    return ("全新瑕疵", 200)
                case .dressed:
                    return ("轻微穿着", 300)
                case .secondHand:
                    return ("二手穿着", 400)
                }
            }
        }
        
    }
    

    使用如下,清晰方便:

    let alertController = UIAlertController(title: "选择球鞋成色", message: nil, preferredStyle: .actionSheet)
    let array: [ShoesQuality] = [.new, .flaw, .dressed, .secondHand]
    array.forEach { (quality) in
        let action = UIAlertAction(title: quality.info.desc, style: .default) { (action) in
            self.selectedQualityCode = quality.info.code
        }
        alertController.addAction(action)
    }
    present(alertController, animated: true, completion: nil)
    

    场景二

    用枚举表示支付结果,当支付失败时展示失败原因。

    可以使用枚举的关联值进行传值:

    /// 支付结果
    enum PayResult {
        case succeed                    // 成功
        case failed(errorInfo: String?) // 失败
        case canceled                   // 取消
    }
    

    使用:

    AlipaySDK.defaultService()?.payOrder(result, fromScheme: SCHEME_STRING, callback: { (resultDict) in
        // 说明
        let desc: String = resultDict!["memo"] as? String ?? ""
        // 状态码
        if let code: String = resultDict!["resultStatus"] as? String {
            switch code {
            case "9000": // 订单支付成功
                completion(.succeed)
            case "4000": // 订单支付失败
                completion(.failed(errorInfo: desc))
            case "6001": // 用户中途取消
                completion(.canceled)
            default:
                completion(.failed(errorInfo: desc))
            }
        }
    })
    

    场景三

    个人中心页面可以是用户的个人中心也可以是订阅号的个人中心,另外:

    1. 用户的个人中心要区分是本人还是别人,如果是别人,传userID;
    2. 订阅号传subscribeID。

    定义:

    enum UserDetailType {
        case person(isOwn: Bool, userID: String?) // 个人(是否是自己,userID)
        case subscribe(subscribeID: String)       // 订阅(订阅号ID)
    }
    

    使用:

    let type = UserDetailType.person(isOwn: false, userID: "001")
    
    switch type {
    case .person(isOwn: true, _):
        print("is own")
    case .person(isOwn: false, let userID):
        print("is other \(userID ?? "")")
    case .subscribe(let subscribeID):
        print("订阅ID:\(subscribeID)")
    }
    

    相关文章

      网友评论

          本文标题:Swift 小笔记 | 枚举实用小 tips

          本文链接:https://www.haomeiwen.com/subject/tuwnictx.html