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

Он также имеет настройки для добавления новых тегов

введите описание изображения здесь