#swift
#быстрый
Вопрос:
Следующее выдает ошибку.
if (
CommandLine.arguments[1].range(of: ".json$", options: .regularExpression, range: nil, locale: nil) != nil amp;amp;
let _config = loadConfig(CommandLine.arguments[1])
) {
self.config = _config
} else {
showAlert("Invalid config file")
terminate()
}
Ответ №1:
Да, это возможно с if-let
помощью (вот еще немного информации о if-let):
if
let _ = CommandLine.arguments[1].range(of: ".json$", options: .regularExpression, range: nil, locale: nil),
let _config = loadConfig(CommandLine.arguments[1])
{
self.config = _config
}
else
{
showAlert("Invalid config file")
terminate()
}
Итак, здесь разница с вашим кодом заключается в том, что amp;amp;
заменяется на ,
(и скобки ( ... )
не нужны).
Вы также можете использовать guard-let
(здесь немного больше информации о guard-let):
guard
let _ = CommandLine.arguments[1].range(of: ".json$", options: .regularExpression, range: nil, locale: nil),
let _config = loadConfig(CommandLine.arguments[1])
else
{
showAlert("Invalid config file")
terminate()
return // Return is needed in guard-let.
}
self.config = _config
guard-let
особенно полезно в функциях. Вы можете выйти из функции, если ваши условия не выполнены. В противном случае ваши определенные let
/ var
-переменные доступны в функции.
Комментарии:
1. Спасибо, Джерун! Мне нужно сначала проверить, является ли
CommandLine.arguments[1]
файл JSON … возможно ли это?2. Я отредактировал свой ответ, теперь он сначала проверяет, является ли он допустимым JSON, а затем
loadConfig()
вызывается.3. Вы можете еще больше улучшить этот ответ, заменив сравнение != nil на
_ let =
в обоих случаях.if _ = CommandLine.arguments[1].range(of: ".json$", options: .regularExpression, range: nil, locale: nil), ...
4. Спасибо за помощь, Джерун!
5. Ты прав, @JoakimDanielson, я изменил свой ответ. Рад, что я смог помочь, Санкнудсен.