Думаю, все мы, кто пишет на Swift хоть изредка, пользовались такой конструкцией языка как блоки. Но есть один нюанс с этими блоками, который сильно раздражает: в Xcode не совсем корректно работает форматирование кода по отношению к ним, а точнее — страдают отступы.
Страдают в том случае, если блок многострочный и указан как один из параметров при вызове метода, а форматирование кода — построчное, то есть, параметр указан на отдельной строке.
Вот в таком случае, самом простом и типичном, форматирование работает хорошо:
Но стоит перенести указание параметра на отдельную строку, как начинается дискотека:
Однако, если добавить захват, то все работает наура:
О проблеме я в Apple отписывал, да и похоже, что они о ней уже давно знают.
Вот у себя мне приходится пользоваться захватом, просто чтобы сохранить форматирование.
К сожалению, кроме решения основной проблемы, этот способ порождает проблему другую — warnings о том, что self не используется внутри блока. Но лично мне проще смириться с такими warnings, чем наблюдать сбитые отступы.
Если кто-то не знал и кому-то заметка окажется полезной, то хорошо.
Если кто-либо знает, как описанную проблему можно решить более лаконично, буду рад узнать.
Страдают в том случае, если блок многострочный и указан как один из параметров при вызове метода, а форматирование кода — построчное, то есть, параметр указан на отдельной строке.
Вот в таком случае, самом простом и типичном, форматирование работает хорошо:
DispatchQueue.main.async {
// ok
}
DispatchQueue.main.async(execute: {
// ok
})
Но стоит перенести указание параметра на отдельную строку, как начинается дискотека:
DispatchQueue.main.async(
execute: {
// wrong
}
)
Однако, если добавить захват, то все работает наура:
DispatchQueue.main.async(
execute: { [weak self] in
// ok
}
)
DispatchQueue.main.async(
execute: { [unowned self] in
// ok
}
)
О проблеме я в Apple отписывал, да и похоже, что они о ней уже давно знают.
Вот у себя мне приходится пользоваться захватом, просто чтобы сохранить форматирование.
К сожалению, кроме решения основной проблемы, этот способ порождает проблему другую — warnings о том, что self не используется внутри блока. Но лично мне проще смириться с такими warnings, чем наблюдать сбитые отступы.
Если кто-то не знал и кому-то заметка окажется полезной, то хорошо.
Если кто-либо знает, как описанную проблему можно решить более лаконично, буду рад узнать.
Комментарии (5)
Sashk1n
02.09.2017 11:05Такую проблему решаю с помощью AppCode. Да и вообще это не самая худшая их недоработка в XCode к сожалению…
Roman_Podymov
02.09.2017 18:37Опишите тогда, как обстоят дела с форматированием блоков в AppCode.
FirsofMaxim
02.09.2017 20:46Там все прекрасно, попробуйте.
house2008
03.09.2017 19:21Вы rxswift используете? аппкод не видит проперти биндинги к эпловым классам, например tableView.rx. и дальше не работает, только показывает базовые методы, хотя в тоже время если написать по памяти то потом в дефинишен переходит без проблем. Поэтому постоянно пишу в обоих IDE, пока в одном автокоплишен отваливается или подсветка синтаксиса пишу в другом и на оборот.
Sie
Даже хз, статья ниочем, ну косячно форматирует и что теперь? не в форматирвоании же смысл. Вот если неработало как заявлено, другое дело. Вы бы еще про подсветку синтаксиса написали что цвет не устраивет.