クロージャー
基本構文
{ (引数) -> 戻り値 in 処理 }
トレーリングクロージャ
funcHoge() { (引数) in 処理 }
@escaping
エスケープ=脱出。
クロージャで使用される。
クロージャ関数の外の変数を、クロージャ内で保持する場合に使用する。
ジェネリック
データ型を抽象化して、汎用的に使ったりする。
ジェネリック関数
// Numericプロトコルに準拠すると、足し算ができる
func generics<T: Numeric>(a1: T, b1: T) -> T {
return a1 + b1
}
// 整数の足し算
print(generics(a1: 1, b1: 2)) // 3
// 少数の足し算
let num1: Decimal = 1.1
let num2: Decimal = 2.2
print(generics(a1: num1, b1: num2))
func hoge<T>(p1 : t) -> t {
}
func hoge2<T, U>(p1 : T, p2 : U) -> t {
}
タイプパラメータ
プロパティラッパー
@state
@AppStorage
データ保存。アプリ終了後も保存したい値を設定する場合に使用。UserDefaults
| 宣言 | |||
| @State | struct(view) | @State private var isPlaying: Bool = False | @Stateを宣言するとSwiftUIが管理する。だから、プログラマーが勝手に初期化処理をしてはいけない。 @Stateインスタンスは、値を参照、更新するわけではない。プロパティのgetter/setterを使って、値を参照、更新している。 値をbindingするためのgetterは、$を使う。 値を変更すると、ビューを再描画する。 |
| @Binding | struct(view) | @Binding var isPlaying: Bool | 親ビューの値を、子ビューに渡したいときに、子ビューで@Bindingを使う。 例、ビューAでチェックすると、ビューBの画像を切り替えたい時など |
| @Published | class | 値を変更した時に、ビューを再描画したい時に使用する。 ObservableObjectプロトコルに準拠している時に使用できる | |
| @ObservedObject | struct(view) | データクラスを紐付けする時に使用する ObservableObjectプロトコルに準拠している時に使用できる |
使い方
@AppStorage("logged") var logged = false
jsonデーコード
JSONSerialization
JSONDecoder を使う
