Xcodeの欠陥のあるSwiftブロックのフォーマット

Swiftを書く私たちは皆、少なくとも時折、そのような言語構造をブロックとして使用したと思います。 しかし、これらのブロックには微妙なニュアンスがあり、非常に迷惑です。Xcodeでは、コードのフォーマットがブロックに関して正しく機能しないか、インデントが損なわれます。

ブロックが複数行であり、メソッドの呼び出し時にパラメーターの1つとして指定され、コードのフォーマットが行ごとである場合、つまり、パラメーターが別の行に示されている場合、問題が発生します。

この場合、最も単純で最も典型的なフォーマットがうまく機能します。

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でこの問題について書いたが、彼らはそれについて長い間知っているようだ。
ここでは、フォーマットを保存するためだけにキャプチャを使用する必要があります。

残念ながら、主な問題の解決に加えて、この方法は別の問題を引き起こします-ブロック内部でselfが使用されていないという警告 。 しかし、個人的には、インデントの破損を観察するよりも、このような警告に同意する方が簡単です。

誰かが知らず、誰かがその記事を有用だと思ったら、それでいい。
記載されている問題をより簡潔に解決する方法を誰もが知っている場合、私は知ってうれしいです。

Source: https://habr.com/ru/post/J336962/


All Articles