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
相关产品推荐
相关产品推荐

