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

iOS开发:isGenderMatch判断异常,妇科预约女性仍触发提示

问题排查:iOS预约功能性别验证逻辑异常

问题背景

开发iOS预约功能时,设定妇科专科仅允许女性预约,但女性用户操作时仍触发"性别不匹配"的Alert提示。

核心问题分析

1. handleConfirmar方法判断逻辑完全颠倒

原代码中guard isGenderMatch == "false" else的逻辑是:当isGenderMatch为"true"时弹出不匹配提示,但实际需求是:性别匹配时允许预约(不弹提示),不匹配时才弹提示。这直接导致匹配的情况反而触发提示。

2. reFreshPicker方法性别匹配赋值逻辑颠倒

原代码中:

  • 当专科性别要求和用户性别不相等时,isGenderMatch被设为"true"
  • 当两者相等时,isGenderMatch被设为"false"
    这与实际需求完全相反,导致性别匹配时isGenderMatch为"false",触发handleConfirmar的else分支弹出提示。

修正方案

方案1:修正字符串类型的判断逻辑

修正handleConfirmar方法

@objc func handleConfirmar(){
    // 仅当性别不匹配时弹出提示
    guard isGenderMatch == "false" else {
        let alert = UIAlertController(title: "SANNA", message: "Sexo no corresponde a la especialidad.¿Desea ir a la sección mi cuenta para registrar un nuevo familiar?", preferredStyle: .alert)
        
        alert.addAction(UIAlertAction(title: "NO", style: .default))
        alert.addAction(UIAlertAction(title: "Sí", style: .default) { _ in
            let miCuenta = MiCuentaViewController()
            self.navigationController?.pushViewController(miCuenta, animated: true)
        })
        self.present(alert, animated: true)
        return 
    }
    // 性别匹配,执行后续预约流程
}

修正reFreshPicker方法

@objc func reFreshPicker(){
    isGenderMatch = "false" // 默认:性别匹配,允许预约
    isAgeMatch = ""
    
    print("entro")
    
    if let especialidad = nombrePicker.pickedElement as? Especialidad{
        let gender = especialidad.getGender()
        let sexo = self.SelectUSerGender
        
        // 仅当专科有明确性别要求时,判断是否匹配
        if !gender.isEmpty && gender != " "{
            // 匹配则设为"false"(允许预约),不匹配则设为"true"(触发提示)
            isGenderMatch = (gender == sexo) ? "false" : "true"
        }
    }
}

方案2:优化为布尔类型(推荐)

用布尔值替代字符串判断,避免字符串比较的潜在错误:

1. 修改变量类型

// 将原字符串类型改为布尔类型
var isGenderMatch = false // 默认:性别匹配,允许预约

2. 修正reFreshPicker赋值逻辑

@objc func reFreshPicker(){
    isGenderMatch = false
    isAgeMatch = ""
    
    print("entro")
    
    if let especialidad = nombrePicker.pickedElement as? Especialidad{
        let gender = especialidad.getGender()
        let sexo = self.SelectUSerGender
        
        if !gender.isEmpty && gender != " "{
            // 不匹配时设为true,匹配时保持false
            isGenderMatch = (gender != sexo)
        }
    }
}

3. 修正handleConfirmar判断逻辑

@objc func handleConfirmar(){
    // 性别不匹配时弹出提示
    guard !isGenderMatch else {
        let alert = UIAlertController(title: "SANNA", message: "Sexo no corresponde a la especialidad.¿Desea ir a la sección mi cuenta para registrar un nuevo familiar?", preferredStyle: .alert)
        
        alert.addAction(UIAlertAction(title: "NO", style: .default))
        alert.addAction(UIAlertAction(title: "Sí", style: .default) { _ in
            let miCuenta = MiCuentaViewController()
            self.navigationController?.pushViewController(miCuenta, animated: true)
        })
        self.present(alert, animated: true)
        return 
    }
    // 性别匹配,执行后续预约流程
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:12