最近読んだもの8 - Swift Concurrency、 Swifty CLI など
- Presenting Sheets: Item, or a Boolean Binding?
- List 内のコンテンツを sheet などで表示する場合、sheet(isPresented:onDismiss:content:) よりも sheet(item:onDismiss:content:) の方が管理する State が減るので良いという話
- Create a Card with an Image Outside its Bounds in SwiftUI
- ある
View
の中のView
を一部はみ出させて表示したい場合 SwiftUI でどうやるのかの話 - UIKit であれば bounds ベースでレイアウトを組んで実現できた
- SwiftUI だと以下の2つの方法が主に挙げられていた
ZStack
でラップする- この content 内で padding をうまいこと指定する
- overlay(alignment:content:) modifier を使う
- overlay modifier の content 内ではみ出させる View を扱う
- ある
- Swift Concurrency – Things They Don’t Tell You
async
await
などを使った Concurrency を扱うときによくハマる問題がまとめられていたasync
await
すればいいだけと言われてるけどそんなに単純じゃないよ
- 自分がハマったり勘違いしていた点も入っていたのでかなり有用
- 例えば
async
な function をawait
した後の thread は、する前の処理 thread と同じにはならない可能性がある。など- 解決策としては
async
な function が main thread で走ることを保証したい場合は常に@MainActor
で annotate する - それが難しい場合、 function 内部で main thread で走ってほしい処理を
await MainActor.run {}
する
- 解決策としては
- 例えば
actor
のActor Reentrancy
などもとても参考になったTask {}
についても勉強になったTask {}
で引数になる closure はuser-initiated
な concurrent queue に dispatch される- Swift Concurrency は CPU core 数を超えないように queue 毎の thread 数を制限しているので、それを超えてしまうと
Task
が suspend する
- Creating a Swifty Command-Line Tool With ArgumentParser
- swift-argument-parser を使って簡単に CLI ツールを Swift で作る方法
- argument や flag などに property wrapper が使われていたりとモダンに手軽に書けそうだなと思った