You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Firestore:如何根据VIP字段值实现不同业务逻辑?

Swift + Firestore 实现VIP权限校验逻辑

原代码的潜在问题

  • 强制解包UID!和document!,遇到用户未登录、文档不存在的场景会直接崩溃
  • 硬假设vip字段是String类型,实际Firestore中通常会存为Int类型,容易出现类型转换失败
  • 未实现你需要的业务逻辑(还在打印0/1,没做“无法进入”提示和页面跳转)

修改后的完整代码

// 安全获取当前用户UID,避免强制解包崩溃
guard let uid = Auth.auth().currentUser?.uid else {
    self.showMsg(message: "请先登录")
    return
}

let db = Firestore.firestore()
let docRef = db.collection("Users").document(uid)

docRef.getDocument { [weak self] document, error in
    guard let self = self else { return } // 防止闭包循环引用
    
    // 处理网络或Firestore请求错误
    if let error = error {
        self.showMsg(message: "获取用户信息失败:\(error.localizedDescription)")
        return
    }
    
    // 校验用户文档是否存在
    guard let document = document, document.exists else {
        self.showMsg(message: "用户信息不存在")
        return
    }
    
    // 读取VIP字段,兼容Int/String两种存储格式
    let vipValue: Int
    if let vipInt = document.get("vip") as? Int {
        vipValue = vipInt
    } else if let vipString = document.get("vip") as? String, let intValue = Int(vipString) {
        vipValue = intValue
    } else {
        self.showMsg(message: "VIP信息异常")
        return
    }
    
    // 执行你需要的业务逻辑
    switch vipValue {
    case 0:
        self.showMsg(message: "无法进入")
    case 1:
        // 跳转至指定页面,根据你的导航方式选择:
        // 方式1:导航栈跳转(如果当前在NavigationController中)
        let targetVC = TargetViewController() // 替换成你的目标ViewController类名
        self.navigationController?.pushViewController(targetVC, animated: true)
        
        // 方式2:模态跳转
        // self.present(targetVC, animated: true)
    default:
        self.showMsg(message: "VIP权限异常")
    }
}

关键优化说明

  • 用guard let替代强制解包,大幅降低崩溃风险
  • 加入[weak self]避免闭包持有当前控制器导致内存泄漏
  • 兼容VIP字段的Int/String两种存储类型,适配不同的Firestore数据结构
  • 补充了文档不存在、字段异常等边界场景的错误提示
  • 完全实现了你要的业务逻辑:VIP=0时显示“无法进入”,VIP=1时跳转到指定页面

内容的提问来源于stack exchange,提问作者lin lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:40:50