0Pricing
Swift Academy · レッスン

共有を減らすための値型

意図しない共有を避けるために 値型 を優先します。構造体や列挙型は代入時にコピーされるため、分離性、予測可能性、スレッド安全性の向上につながります。

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

値型を使う理由

Swiftのstruct/enumは値型です。代入や引数渡しではコピーが作成されます。これにより意図しない共有が減り、状態を把握しやすくなります。

参照の共有(class)

クラスは参照型です。複数の変数が同じインスタンスを指せるため、変更が別名を通じて波及します。

final class Bag {
    var items: [String]
    init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a            // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items)       // ["pen","book"] — mutated via b
print(b.items)

独立したコピー(struct)

Structは代入時にコピーされます。各変数がそれぞれのデータを所有するため、変更はその変数内にとどまります。

struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1          // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x)    // 1, 99 — p1 unaffected

copy-on-writeコレクション

Array/Dictionary/Setはcopy-on-writeを採用した値型です。複数の参照から共有されている配列を変更すると、Swiftは新しいコピーを作成します。

var a1 = [1,2,3]
var a2 = a1      // copy-on-write handle
a2.append(4)     // triggers copy if a1 is uniquely referenced
print(a1)        // [1,2,3]
print(a2)        // [1,2,3,4]

純粋に近い更新

純粋に近いAPIを設計します。値を受け取り、新しい値を返します。呼び出し側で予期しない共有状態の変更を避けられます。

struct Profile {
    var name: String
    var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
    var copy = p          // work on a value copy
    copy.tags.append(tag) // caller gets a new updated value
    return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags)  // []
print(pB.tags)  // ["swift"]

適切な選択

ガイドライン:

  • 小さく、不変、または局所的に変更するデータにはstructを優先します。
  • 同一性、共有される可変状態、または継承が必要な場合はclassを使います。
  • 値型は共有を減らし、並行処理についてより安全に判断しやすくします。

値型と参照の共有

理解度チェック: 値型を使うと意図しない共有を避けやすくなるのはなぜですか?

まとめ

まとめ: Structやenumは値です。共有される可変状態を最小限にするために使います。コレクションはcopy-on-writeを採用しているため、変更が別の保持者に予期せず影響することはありません。

よくある質問

「共有を減らすための値型」レッスンは無料ですか?

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

「共有を減らすための値型」で何を学びますか?

意図しない共有を避けるために 値型 を優先します。構造体や列挙型は代入時にコピーされるため、分離性、予測可能性、スレッド安全性の向上につながります。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「共有を減らすための値型」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. ARCの基本:strong / weak / unowned
  2. 循環参照とweak/unownedによる解消
  3. 共有を減らすための値型
← Swift Academyに戻る