gpt4 book ai didi

swift - Swift中如何使用guard子句,让代码更干净

转载 作者:行者123 更新时间:2023-12-04 01:05:34 26 4
gpt4 key购买 nike

我的项目中有以下代码:

//code used in my NEXT button

let errorMessage:String = validateAllFields()
if ( errorMessage != "" ) {
AlertActions.showBasicAlert(erroParaExibir: errorMessage, currentView: self)
return
}
...more code to be executed


//code to validate if all fields are empty

func validateAllFields() -> String {
var errorMessage = ""
if( nomeAnimalTextField.text == ""){
errorMessage = "Preencha o nome do animal"
} else if( microchipAnimalTextField.text == ""){
errorMessage = "Preencha o microchip do animal"
} else if( microchipAnimalTextField.text!.trim().count < 15){
errorMessage = "Microchip do animal deve possuir 15 posições númericas"
} else if( mesNascimentoTextField.text == ""){
errorMessage = "Preencha o mês do nascimento"
} else if( anoNascimentoTextField.text == ""){
errorMessage = "Preencha o ano de nascimento"
}
return errorMessage
}

下面的代码是我的保护子句

if ( errorMessage != "" ) {
AlertActions.showBasicAlert(erroParaExibir: errorMessage, currentView: self)
return
}

如果条件失败,return 会保护其余代码不被执行。

我想知道如何只使用 validateAllFields() 并在此函数中插入带有代码“return”部分的 if 条件,这可能吗?

最佳答案

我喜欢 John Montgomery 的回答,但让错误成为错误而不是字符串也很有帮助。然后你就可以使用 Swift 的错误处理系统了。而不是返回一个字符串,而是抛出:

struct ValidationError: Error {
var localizedDescription: String
init(_ message: String) { self.localizedDescription = message }
}

func validateAllFields() throws {
if( nomeAnimalTextField.text == "") { throw ValidationError("Preencha o nome do animal") }
if( microchipAnimalTextField.text == ""){ throw ValidationError("Preencha o microchip do animal") }
if( microchipAnimalTextField.text!.trim().count < 15) {
throw ValidationError("Microchip do animal deve possuir 15 posições númericas")
}
if( mesNascimentoTextField.text == "") { throw ValidationError("Preencha o mês do nascimento") }
if( anoNascimentoTextField.text == "") { throw ValidationError("Preencha o ano de nascimento") }
}

然后当你想检查这个时,使用do/catch:

do {
try validateAllFields()

// ...more code to be executed
} catch {
AlertActions.showBasicAlert(erroParaExibir: error.localizedDescription,
currentView: self)
}

或者您可以将 catch 移到顶部并添加 return 如果代码中没有其他内容会产生错误。 (或者您可以通过将此方法标记为 throws 让错误进一步冒泡。)

我还建议 showBasicAlert 接受一个错误而不仅仅是一个字符串。

在这里使用 throws 的好处是它可以灵活地处理更复杂的问题。例如,您可以提取一些逻辑:

func validateNonEmpty(_ field: UITextField, or message: String) throws {
if field.text == "" { throw ValidationError(message) }
}

func validateField(_ field: UITextField, atLeastLength minLength: Int, or message: String) throws {
if field.text!.trim().count < minLength { throw ValidationError(message) }
}

然后将验证器写成:

func validateAllFields() throws {
try validateNonEmpty(nomeAnimalTextField, or: "Preencha o nome do animal")
try validateNonEmpty(microchipAnimalTextField, or: "Preencha o microchip do animal")
try validateField(microchipAnimalTextField, atLeastLength: 15,
or: "Microchip do animal deve possuir 15 posições númericas")
try validateNonEmpty(mesNascimentoTextField, or: "Preencha o mês do nascimento")
try validateNonEmpty(anoNascimentoTextField, or: "Preencha o ano de nascimento")
}

关于swift - Swift中如何使用guard子句,让代码更干净,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66588645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com