0Pricing
Swift Academy · レッスン

カスタムプロパティラッパーの作成

wrappedValueを備えた@propertyWrapperを実装し、ロジックをカプセル化します。

「カスタムプロパティラッパーの作成」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

プロパティラッパーは、プロパティの保存に関するロジックをカプセル化し、検証、変換、永続化などの定型処理を再利用できるようにします。

基本構文

```swift @propertyWrapper struct Clamped { var wrappedValue: Int { didSet { wrappedValue = min(max(0,wrappedValue),100) } } init(wrappedValue: Int) { self.wrappedValue = min(max(0,wrappedValue),100) } } struct Gauge { @Clamped var level = 50 } var g = Gauge() g.level = 150 // clamped to 100 ```

wrappedValueの要件

すべてのプロパティラッパーは`wrappedValue`を定義する必要があります。これは、ラッパーの利用者が読み書きする値です。

ジェネリックプロパティラッパー

```swift @propertyWrapper struct Logged { private var value: T var wrappedValue: T { get { print("get"); return value } set { print("set to \(newValue)"); value = newValue } } init(wrappedValue: T) { value = wrappedValue } } ```

ラッパーの使用

```swift struct Model { @Logged var name: String = "Default" } var m = Model() let n = m.name // prints "get" m.name = "Alice" // prints "set to Alice" ```

カスタム初期化引数

```swift @propertyWrapper struct Default { var wrappedValue: T init(wrappedValue: T) { self.wrappedValue = wrappedValue } init(_ default: T) { wrappedValue = default } } @Default(42) var count: Int ```

保存プロパティと計算プロパティでのラッパー

プロパティラッパーは、隠れた保存領域(_wrappedValue)を追加します。属性を付けたプロパティは、構文上の糖衣構文です: ```swift @Clamped var level = 50 // Desugars to: var _level = Clamped(wrappedValue: 50) var level: Int { get { _level.wrappedValue } set { _level.wrappedValue = newValue } } ```

UserDefaultsラッパー

```swift @propertyWrapper struct UserDefault { let key: String; let defaultValue: T var wrappedValue: T { get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue } set { UserDefaults.standard.set(newValue, forKey: key) } } } @UserDefault(key:"theme",defaultValue:"light") var theme: String ```

スレッドセーフなラッパー

```swift @propertyWrapper final class Atomic { private var value: T; private let lock = NSLock() var wrappedValue: T { get { lock.lock(); defer { lock.unlock() }; return value } set { lock.lock(); defer { lock.unlock() }; value = newValue } } init(wrappedValue: T) { value = wrappedValue } } ```

型でラッパーを組み合わせる

```swift struct Settings { @Clamped var volume = 50 @UserDefault(key:"username",defaultValue:"") var username: String @Logged var debugMode = false } ```

確認問題

すべての`@propertyWrapper`型で必須となるプロパティは何ですか?

まとめ

重要なポイント: • `@propertyWrapper`と`wrappedValue`で、最小限のプロパティラッパーを作成できます • ラッパーは隠れた`_name`の保存領域を追加します • ジェネリックラッパーは任意の型Tで使用できます • 一般的な用途には、範囲制限、ログ記録、UserDefaults、スレッドセーフ化があります • カスタム初期化引数で設定を指定できます 次は、投影値です。

よくある質問

「カスタムプロパティラッパーの作成」レッスンは無料ですか?

はい。「カスタムプロパティラッパーの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「カスタムプロパティラッパーの作成」で何を学びますか?

wrappedValueを備えた@propertyWrapperを実装し、ロジックをカプセル化します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「カスタムプロパティラッパーの作成」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. カスタムプロパティラッパーの作成
  2. $bindingによる射影値
  3. Combineにおける@Publishedとオブザベーション
  4. 複数のプロパティラッパーの合成
← Swift Academyに戻る