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

в 16:58, , рубрики: ios development, swift, разработка под iOS

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

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

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

Источник

Поделиться

* - обязательные к заполнению поля