我有一个if if else条件的函数来检查所有细节是否有效。但是,我想优化if-else条件。
if emailInput!.isEmailValid && passwordInput!.isPasswordValid && usernameInput!.isUserNameValid && testConfirmedPwd == true && photoPick != "image1" {
print("valid")
} else {
print("not valid")
}
因为我想知道条件的哪一部分无效,print
它不是一起完成的。例如,如果其他人有效,则emailInput
无效。
答案 0 :(得分:2)
你可以做的是将每个值存储在一个布尔数组中,然后循环遍历该数组,然后打印if语句的结果:
if(someList.get(0)!=null)
您还可以将其链接到存储名称的单独数组,并使用索引从该数组中取一个名称,以便您知道条件名称,而不仅仅是数字。
这样做也可以让以后添加条件变得非常容易。
答案 1 :(得分:2)
要知道条件的哪一部分失败,您可以单独检查每个案例并做出相应的反应:
if !emailInput!.isEmailValid {
// Invalid email
} else if !passwordInput!.isPasswordValid {
// Invalid pwd
} else if !usernameInput!.isUserNameValid {
// Invalid username
} else if !testConfirmedPwd {
// Invalid pwd
} else if photoPick == "image1" {
// Invalid image
}else{
print("valid")
}
答案 2 :(得分:1)
这样做的一个明确方法是为每个配置都有一个guard
语句。像这样:
guard emailInput.isEmailValid else { print("Email is invalid") }
guard passwordInput.isPasswordValid else { print("Password is invalid") }
.
.
.
print("Valid")
另一种很酷的方法是使用元组。像:
typealias Condition = (isValid: Bool, name: String)
let conditions: [Condition] = [
(emailInput.isEmailValid, "Email"),
(passwordInput.isPasswordValid, "Password"),
.
.
]
let isInputValid = conditions.reduce(true) { (aggregate, condition) -> Bool in
if !condition.isValid { print("Invalid \(condition.name)") }
return aggregate && condition.isValid
}
guard isInputValid else { return }
// handle valid input now
这允许检查所有条件,而不仅仅是在第一个无效条件下退出。输出如下:
Invalid Password
Invalid Date of birth
答案 3 :(得分:0)
您必须分别检查所有条件:
@post = Post.create(content: "nice day we are having")
@user = User.find(2)
答案 4 :(得分:0)
您可以尝试这样的事情:
try{
obj.setRepository(repositoryMock);
Mockito.when(repositoryMock.getView("promotion")).thenReturn(promotionViewMock);
}catch(Exception e) {
}
这使得代码更具可读性,并且在一个条件失败时不检查其他条件
答案 5 :(得分:0)
为此目的,您必须分别检查每个条件,并为每个条件更新字符串或标志,以了解它是否有效。
void Start()
{
choices = new string[50]; //This should fix it
Dialoguer.events.onStarted += onStarted;
Dialoguer.events.onEnded += onEnded;
Dialoguer.events.onTextPhase += onTextPhase;
}