0Pricing
Swift Academy · レッスン

カスタムインデックス用のサブスクリプト

配列のような構文で要素を読み書きするカスタムサブスクリプトを定義します。安全なアクセサーや複数パラメーターのインデックス、型(static)サブスクリプトにも対応します。

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

概要

サブスクリプトを使用すると、角括弧構文でデータにアクセスできます。読み取り専用にも読み書き可能にもでき、複数のインデックスを受け取ることもできます。

読み書き可能なサブスクリプト

get/setサブスクリプトを作成すると、配列のような構文で内部ストレージを公開できます。

struct Box {
    private var items: [String] = []
    init(_ values: [String]) { self.items = values }

    subscript(index: Int) -> String {
        get { items[index] }           // may trap if out of bounds (like Array)
        set { items[index] = newValue }
    }
}
var b = Box(["a","b","c"])
print(b[1])     // "b"
b[1] = "B"
print(b[1])     // "B"

安全なサブスクリプト

無効なインデックスによるトラップを避けるには、オプショナルを返します。これが扱いやすい安全なサブスクリプトです。

extension Array {
    subscript(safe i: Int) -> Element? {
        return indices.contains(i) ? self[i] : nil
    }
}
let arr = [10,20]
print(arr[safe: 1] ?? -1)  // 20
print(arr[safe: 5] ?? -1)  // -1

複数パラメータ

サブスクリプトは複数のパラメータを受け取れます。行列や座標へのアクセスに適しています。

struct Matrix {
    let rows: Int, cols: Int
    private var grid: [Int]
    init(rows: Int, cols: Int, fill: Int = 0) {
        self.rows = rows; self.cols = cols
        self.grid = Array(repeating: fill, count: rows*cols)
    }
    private func index(_ r: Int, _ c: Int) -> Int { r*cols + c }

    subscript(r: Int, c: Int) -> Int {
        get { grid[index(r,c)] }
        set { grid[index(r,c)] = newValue }
    }
}
var m = Matrix(rows: 2, cols: 3)
m[0, 2] = 7
print(m[0, 2])

型サブスクリプト

staticを使った型サブスクリプトを追加すると、インスタンスではなく型自体に対してインデックスを指定できます。

struct Roman {
    static let map: [Int:String] = [1:"I", 5:"V", 10:"X"]
    static subscript(_ n: Int) -> String? {
        return map[n]
    }
}
print(Roman[5] ?? "?")   // "V"

ヒント

ヒント:

  • 安全なアクセスにはオプショナルを返すことを優先します。
  • サブスクリプトは単純に保ち、時間のかかるロジックはメソッドに記述します。
  • 分かりやすさのためにパラメータに名前を付けます(例:[row:col:])。

サブスクリプトの意味

確認問題:サブスクリプトを使うと何ができるようになりますか?

まとめ

まとめ:読み書き可能なサブスクリプトを作成し、安全なオプショナルによるアクセサーを追加します。また、複数パラメータのインデックス指定に対応し、型サブスクリプトも定義できます。

よくある質問

「カスタムインデックス用のサブスクリプト」レッスンは無料ですか?

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

「カスタムインデックス用のサブスクリプト」で何を学びますか?

配列のような構文で要素を読み書きするカスタムサブスクリプトを定義します。安全なアクセサーや複数パラメーターのインデックス、型(static)サブスクリプトにも対応します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「カスタムインデックス用のサブスクリプト」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. プロパティとサブスクリプト
  2. lazyとプロパティオブザーバー
  3. get/setによる計算プロパティ
  4. カスタムインデックス用のサブスクリプト
← Swift Academyに戻る