首页 > 解决方案 > 遍历项目并等到所有项目都被检查成功之前 Swift

问题描述

我有一个 forLoop 循环遍历 textField 数组中的项目并检查字段是否全部填充,否则返回。我遇到的问题是默认情况下,数组中的 4 个项目中的 3 个是预先填充的,所以在第一个实例中,第一个项目是未填充的项目并且函数中断但是一旦我将第二个项目中的项目也设为空并填充第一个,true在重新运行检查之前它首先会很有趣,这就是false失败检查的方式。true在审查所有项目之前,如何防止关闭被调用。

private func formArrayValidation(completion: @escaping (Bool, [String: Any]?) -> Void) {
        guard self.pageThree.formArray.count > 0 else {
            return
        }
        for form in self.pageThree.formArray {
            
            guard form.textField.text != "" else {
                SPAlert.present(message: "\(form.dynamicModel?.name ?? "") is required", haptic: .error)
                completion(false, nil)
                break
            }
            
            guard Regex.validateDynamicForm(form.textField.text ?? "", pattern: form.dynamicModel?.pattern ?? "") else {
                SPAlert.present(message: "\(form.textField.text ?? "") does not match our pattern", haptic: .error)
                completion(false, nil)
                break
            }
            guard let key = form.dynamicModel?.key, let value = form.textField.text else { return }
            inputParameter[key] = value
            self.applicationParameter["inputs"] = inputParameter
            completion(true, applicationParameter)
        }
        
    }

标签: swift

解决方案


您必须在循环之后调用该completion(true)行,因为所有表单都必须通过测试。

并替换breakreturn立即返回

private func formArrayValidation(completion: @escaping (Bool, [String: Any]?) -> Void) {
    guard !self.pageThree.formArray.isEmpty else {
        return
    }
    for form in self.pageThree.formArray {
        
        guard !form.textField.text.isEmpty else {
            SPAlert.present(message: "\(form.dynamicModel?.name ?? "") is required", haptic: .error)
            completion(false, nil)
            return
        }
        
        guard Regex.validateDynamicForm(form.textField.text ?? "", pattern: form.dynamicModel?.pattern ?? "") else {
            SPAlert.present(message: "\(form.textField.text ?? "") does not match our pattern", haptic: .error)
            completion(false, nil)
            return
        }
        guard let key = form.dynamicModel?.key, let value = form.textField.text else { return }
        inputParameter[key] = value
        self.applicationParameter["inputs"] = inputParameter
    }
    completion(true, applicationParameter)
    
}

注意:检查集合类型和字符串是否始终为空,isEmpty而不是count > 0!= ""


推荐阅读