jarinosuke blog

最近読んだもの8 - Swift Concurrency、 Swifty CLI など

  • Presenting Sheets: Item, or a Boolean Binding?
  • 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 {} する
    • actorActor 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 が使われていたりとモダンに手軽に書けそうだなと思った