- PVSM.RU - https://www.pvsm.ru -

Недоработка форматирования блоков Swift в Xcode

Думаю, все мы, кто пишет на Swift хоть изредка, пользовались такой конструкцией языка как блоки. Но есть один нюанс с этими блоками, который сильно раздражает: в Xcode не совсем корректно работает форматирование кода по отношению к ним, а точнее — страдают отступы.

Страдают в том случае, если блок многострочный и указан как один из параметров при вызове метода, а форматирование кода — построчное, то есть, параметр указан на отдельной строке.

Вот в таком случае, самом простом и типичном, форматирование работает хорошо:

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, чем наблюдать сбитые отступы.

Если кто-то не знал и кому-то заметка окажется полезной, то хорошо.
Если кто-либо знает, как описанную проблему можно решить более лаконично, буду рад узнать.

Автор: Станислав Потемкин

Источник [1]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ios-development/263173

Ссылки в тексте:

[1] Источник: https://habrahabr.ru/post/336962/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best