Swift Notes
C++経験者向けSwift記事
C++の感覚でSwiftを書くと引っかかりやすい言語仕様を、ポイントごとに整理しています。
記事
Swiftのactorで状態を守るときに見ること
Swift Concurrencyのactorで共有状態を守る考え方、awaitが必要になる理由、MainActorとの違いを整理します。
Swiftでasync/awaitとTaskを使うときに最初に見ること
Swiftでasync/awaitを使うときの非同期関数、Task、MainActorへの反映を最小構成で整理します。
SwiftのクロージャとselfのキャプチャをC++ラムダ感覚で整理する
Swiftのclosure、trailing closure、escaping、selfキャプチャを、C++のlambda captureと比べながら整理します。
SwiftのCodableでJSONのキー名が合わないときの設定
SwiftのCodableでsnake_caseのJSONをcamelCaseのプロパティに変換するkeyDecodingStrategyとCodingKeysの使い分けを整理します。
Swiftの計算プロパティをC++のgetter感覚で読むときに気をつけること
Swiftのcomputed propertyを、C++のgetter/setterやメンバ変数の感覚と比べながら、stored propertyとの違いを整理します。
SwiftのenumはC++のenum classよりsum typeとして見ると分かりやすい
Swiftのenum、associated values、switchを、C++のenum classやstd::variantの感覚と比べながら整理します。
Swiftの関数引数でラベルとinoutに詰まったときに見ること
Swiftの関数引数ラベル、外部引数名、_、inoutを、C++の関数呼び出しや参照渡しの感覚と比べながら整理します。
SwiftのGenericsとwhere句をC++テンプレート感覚で読む
SwiftのGenerics、型制約、where句を、C++テンプレートやconceptsの感覚と比べながら整理します。
Swiftの@MainActorをUIスレッドの所有権として見る
Swiftの@MainActor、MainActor.run、UI状態更新を、C++のメインスレッド制約の感覚と比べながら整理します。
SwiftのOptionalをC++のnullptrやstd::optionalと比べて整理する
SwiftのOptional、nil、if let、guard let、!を、C++のnullptrやstd::optionalの感覚と比べながら整理します。
Swift Package ManagerでCLIツールを作る最小構成
Swift Package ManagerでexecutableTargetを使ってコマンドラインツールを作るときのPackage.swiftと実行方法を整理します。
SwiftのprotocolとextensionをC++のinterface感覚から整理する
Swiftのprotocol、extension、default implementationを、C++の抽象クラスや自由関数の感覚と比べながら整理します。
SwiftでResultとthrowsを使い分ける目安
Swiftで失敗する処理をResultで返すかthrowsにするか、同期処理、非同期処理、状態として保持する場合から整理します。
C++が分かる人向けにSwiftのstructとclassの違いを整理する
Swiftのstructとclassの違いを、C++の値型、参照、コピー、ミュータブル操作の感覚と比べながら整理します。
SwiftのthrowsとtryをC++例外と比べて整理する
Swiftのthrows、try、do-catch、Resultとの違いを、C++例外の感覚と比べながら整理します。
扱うテーマ
- Optionalとnilをnullptrやstd::optionalと比べて整理する
- enum、associated value、switchの使いどころを整理する
- 関数の引数ラベル、inout、クロージャの読み方を確認する
- @MainActorやasync/awaitでUI更新まわりの迷いどころを減らす