Есть ли способ (с помощью флага компилятора или скрипта) обнаружить принудительную развертку в проекте Swift?
Я думаю о таких вещах:
let b = a as! B
let c = a!
a!.method()
Например, без ложных срабатываний для var a: A!
.
Есть ли способ (с помощью флага компилятора или скрипта) обнаружить принудительную развертку в проекте Swift?
Я думаю о таких вещах:
let b = a as! B
let c = a!
a!.method()
Например, без ложных срабатываний для var a: A!
.
Как отмечено в комментариях, поиск по регулярным выражениям может быть создан для обнаружения большинства случаев использования постфикса !
. (И если вы будете осторожны, вы сможете заставить его игнорировать большинство случаев использования двоеточия-типа-банга, чтобы вы не получали шума от объявлений типа IUO.)
Это почти настолько хорошо, насколько это возможно, и это неполно - например, каждый раз, когда вы вызываете API, который возвращает тип IUO, и получаете доступ к его результату, не проверяя необязательный параметр, вы могли бы выполнять принудительную развертку, не имея явного удары в вашем коде.
Любой инструмент, который пытается постоянно предупреждать о непроверенных развертываниях, должен иметь довольно глубокие знания системы типов Swift, грамматики и правил вывода типов. И на самом деле единственное место, где вы можете иметь такие знания (и иметь их правильно), находится внутри компилятора. Так что вам, вероятно, лучше всего подать запрос на добавление функций в Apple или работать с проект с открытым исходным кодом.
!
для Bools и подобных. Я размещал это здесь ранее, дайте мне знать, если это ответит на ваш вопрос, и я опубликую это как ответ - person Kametrixom   schedule 12.12.2015as!
) или оператора игнорирования ошибки (try!
) не является безоговорочно и повсеместно плохим. Точно так же использование типаImplicitlyUnwrappedOptional<T>
-- все эти конструкции можно использовать безопасно, с осторожностью или бездумно, так как это может привести к ошибкам. Я бы согласился, что первые три являются скорее признаком небрежного кодирования, чем использование типа IUO, тем не менее, особенно учитывая, что IUO необходимы (и рекомендуются) для таких случаев использования, как торговые точки IB. - person rickster   schedule 13.12.2015