Swift: #warning эквивалент
Есть ли у Swift эквивалент #warning?
Он просто использовал для отображения предупреждения в собственном графическом интерфейсе Xcode
Меня также интересует, есть ли эквивалент #error.
Apple заявила, что знак #pragma скоро появится, возможно, это будет так же.
![enter image description here]()
Ответы
Ответ 1
В будущем разработчики Apple могут очень хорошо опубликовать ориентир //WARNING:
или предоставить функциональность для другого названного ориентира.
Чтобы объявить эту функцию с помощью Swift в Xcode сегодня, вы можете сделать следующее, как описано Ben Dodson и Jeffrey Sambells:
Добавьте новый запуск Script на вкладку фаз вашей целевой фазы (настройки проектa > фазы сборки > "+" > новый запуск Script) и вставьте следующий код в пустое поле:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Это заставит Xcode отмечать предупреждение во время компиляции для любых комментариев // TODO:
или // FIXME:
, которые вы разметки.
В качестве альтернативы вы можете изменить TAGS с помощью специального тега: TAGS="WARNING:"
в приведенном выше коде, который сохранит поведение по умолчанию для TODO и FIXME и повысит предупреждение о компиляции во всех комментариях, отмеченных как // WARNING:
.
http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/
http://jeffreysambells.com/2013/01/31/generate-xcode-warnings-from-todo-comments
РЕДАКТИРОВАТЬ: 18/11/14
@david-h поднял хороший момент в своем комментарии. Если вы хотите только повысить эти предупреждения в конкретной конфигурации сборки, вы можете сделать следующее:
if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
В качестве альтернативы вы можете использовать "Release", а не "Debug" для целевых производственных сборок.
Ответ 2
Быстро, грязно и ох так элегантно просто в одно и то же время.
// Description of what you need to fix
var FIX_ME__🛠🛠🛠: AnyObject
Выдает предупреждение о том, что "FIX_ME__" никогда не использовался.
Вы можете добавить смайлики к имени переменной, если хотите... Я часто использую 😱 и 🛠, для чего-то, что действительно нужно для исправления, я даже рассматриваю 💩. Вы можете заменить FIX_ME__
на то, что вы хотите: ALGORITHM_NEEDS_REVIEW
, BugID_148
или JOHNNY_YOU_BROKE_THIS
- это несколько примеров.
Быстро, никакая настройка, лаконичность и смайлики не могут даже добавить юмор/личность к вашему коду. Иногда наиболее простым решением является наилучшее решение.
Ответ 3
Пока еще не добавлена команда Apple. То, что я решил сделать, это, вероятно, обман, но, по крайней мере, он показывает мне сообщение FIXME. Итак, что я делаю, объявляю функцию FIXME() в файле Swift:
@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}
и когда я вызываю его из любой другой функции, он показывает предупреждение, например
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
FIXME() // Incomplete method implementation.
return 0
}
![enter image description here]()
Для Swift 2 используйте
@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
Ответ 4
В Swift с использованием XCode 6 вы можете использовать разные виды ориентиров для разных целей.
Вот что говорит об этом Apple:
Xcode теперь поддерживает //MARK:,//TODO: и//FIXME: ориентиры для аннотации ваш код и перечисляет их в панели перехода.
Итак, для установки предупреждения с описанием вы будете использовать что-то вроде этого:
//TODO: Clean up this code after testing
Если вы просто хотите установить короткую отметку (при условии, что вы запомните, что делать), используйте это:
//FIXME
EDIT:
Однако эти ориентиры появляются только в строке перехода XCode, которая может быть не такой, какой вы хотите, и чего можно ожидать, особенно из меток //TODO: и//FIXME. Я подал на него радар: # 17776817. Надеюсь, Apple добавит это в ближайшие сборки в XCode 6.
РЕШЕНИЕ (EDIT 2):
Если вы установите Swift Linter через Homebrew (запустите brew install swiftlint
после a brew update
) и добавьте предлагаемую сборку script к вашему проекту, то вы увидите, что все ваши ориентиры TODO
и FIXME
отображаются как предупреждения в Xcode. SwiftLint даже добавит еще несколько предупреждений/ошибок, которые вы можете настроить в соответствии с вашими потребностями - я могу только рекомендовать использование SwiftLint, и это решает эту проблему в отличный способ!
Ответ 5
Посмотрите на статью.
Вы можете написать свой собственный script, который выделит все теги.
TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"
Это приводит к:
![введите описание изображения здесь]()
Ответ 6
В качестве альтернативы, если вы хотите, чтобы что-то появилось на панели предупреждений, вы могли бы написать что-то вроде:
if (false){
var x = 2;
}
Вы не можете получить какой-либо текст, но, по крайней мере, это более заметный маркер, особенно если вы склонны относиться к большинству предупреждений, таких как ошибки.
Ответ 7
Один CocoaPod, который я использовал, имел .swift
в своем имени, поэтому был возвращен каталог, из-за которого авария script от Kyle. Добавление -type f
в команду find
устраняет эту проблему, рассматривая только файлы, которые соответствуют *.swift
, а также возвращает каталоги, соответствующие шаблону.
Конечный код, который я использовал:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
Ответ 8
После долгих поисков и тоски я убежден, что такой сущности не существует. Я по-прежнему надеюсь, что последние выпуски Xcode, в которых упоминается о продолжающемся отсутствии механизма #pragma mark, могут также появляться #warning и #error.
В качестве альтернативы, я настоятельно рекомендую подать Радар с Apple в bugreport.apple.com, чтобы добавить эту функцию (вы можете обмануть 17702491).
Ответ 9
Если вы не настроите настройку своей сборки, еще одно простое домашнее средство - это приклеить место для редактора перед комментарием:
<#todo#>// stop and fixme!
Когда вы создаете ошибку, вы получаете ошибку "Заместитель редактора в исходном файле", но, в отличие от решения Jordans, нет никакой живой ошибки, чтобы раздражать вас при вводе:
![place placeholder]()
Ответ 10
Мы написали настраиваемый инструмент, который позволяет помещать предупреждения и ошибки в Xcode Issue Navigator на основе тега комментария и конфигурации сборки: https://github.com/doubleencore/XcodeIssueGenerator
Установите его:
brew tap doubleencore/tap
brew install xcodeissuegenerator
Затем поместите строку в Run Script Build Phase:
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
Вот статья, описывающая, как мы ее используем.
Ответ 11
Мой ответ не совсем удовлетворяет вашему вопросу, но если вы хотите что-то легкое, вы можете использовать этот плагин alcatraz, который работает во всех проектах без дополнительной подготовки.
Просто выполните следующие действия:
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
Он также имеет настройки для добавления новых тегов
![введите описание изображения здесь]()