В этом нет ничего плохого. «Правильный» способ, когда что-то вроде isTooShort
принадлежит вам и вы хотите вызвать его без захвата результата, это пометить его как @discardableResult
. Если бы вы сделали это, вы могли бы написать
do {
try isTooShort(word)
try isTooLong(word)
print(word) // if we get here, it's neither too short nor too long
} catch ...
Но то, что вы делаете, также "правильно" в этих обстоятельствах.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * *1001* 1010 * * * * * * * * * * * * * * * * * * * * 100 * *. Ваша реализация isTooShort
очень странная. Вы, кажется, неправильно используете throw
. Не ясно, какую проблему вы пытаетесь решить, реализовав ее таким странным способом. isTooShort
может потерпеть неудачу только одним способом: слово слишком короткое. Так почему бы просто не вернуть Bool? isTooShort
задает простой вопрос «да / нет», так что просто ответьте: верните Bool и остановитесь.
Если ваша цель - ответить на вопрос трех , то есть сообщить вызывающему абоненту, было ли это слово слишком коротким, слишком длинным или просто правильным, а затем просто верните пользовательское перечисление, которое отвечает на вопрос:
enum WordLength {
case tooShort
case tooLong
case justRight
}
func howIs(_ word: String) -> WordLength {
if word.count < 3 { return .tooShort }
if word.count > 5 { return .tooLong }
return .justRight
}