最近読んだもの8 - Swift Concurrency、 Swifty CLI など
• 1 min read
- 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
asyncawaitなどを使った Concurrency を扱うときによくハマる問題がまとめられていたasyncawaitすればいいだけと言われてるけどそんなに単純じゃないよ
- 自分がハマったり勘違いしていた点も入っていたのでかなり有用
- 例えば
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 が使われていたりとモダンに手軽に書けそうだなと思った