なぜか、
通常プロジェクトと Playground では Auto-Completion が違う。
マルチなクロージャーを含む
Button(action:label:)
を Auto-Completion で生成して、全クロージャー展開しようとするとできない。
せっかく Playgorund で Completion の使い方を掴んだような気がしてたのに!
【Xcode】自動補完 (Auto Completion) の使い方 - trailing closure#SwiftUI #SwiftData #プログラミング初心者 https://t.co/SkjyyJrFgF
— chanzmao (@maochanz) December 19, 2023
🛠️ 症状
クロージャー展開しようとすると以下の感じ。
Playground 側は OK。
// Playground
Button {
code
} label: {
code
}
// Button(action: <#T##() -> Void#>, label: <#T##() -> View#>)
フォーカスの当たったままコピーすると設定記述的なものがテキストで取得できる。
これが、既存プロジェクト側では、なぜか、展開できない。
// Project
Button(action: {}, label: {
Text("Button")
})
// Button(action: /*@START_MENU_TOKEN@*/{}/*@END_MENU_TOKEN@*/, label: {
// /*@START_MENU_TOKEN@*/Text("Button")/*@END_MENU_TOKEN@*/
// })
なんやこれ。
プロジェクト内に同様な記述があると思って探しみたけど見当たらない。
登録されている Completions を
Editor
↓
Show Completions
で確認しても問題はなさそう。
あれこれやっていると、直ることがある。
- Xcode 再起動直後だけ一瞬直る。
- しかし、2回目ぐらいから戻っておかしくなる。
よって、キャッシュか何かを読み込んでいる、と想像。
🛠️ 修正・対応方法
これでいけた。
rm -rf ~/Library/Developer/Xcode/DerivedData/*
👉 Xcode Quick Fix - Clear Cache
以下でも直ったのかもしれない。
Product
↓
Clean Build Folder...
+
Option
👉 [Xcode][小ネタ] DerivedDataの削除についての備忘録 | DevelopersIO
🛠️ まとめ
DerivedData を削除することで効果が出る不具合。
- Build Failed
- ストレージが肥大
- Completion がおかしい
キャッシュのようなもので消しても問題ないらしい。
場所はデフォルトで、
~/Library/Developer/Xcode/DerivedData
で以下メニューから確認できる。
File
↓
{project name} Settings...
少し前に、Xcode をバージョンアップデートしたのでそれが影響しているのかもしれないです。