ジェネリック型を拡張するときには、エクステンションの定義に型パラメータリストを提供しません。代わりに、オリジナルの型定義にある型パラメータリストをエクステンションの本体内で利用することができ、オリジナルの定義にある型パラメータを参照するために、オリジナルの型パラメータ名を使用します。

次の例では、スタックからポップせず、スタックのトップにあるアイテムを返す読み取り専用のコンピューテッドプロパティ topItem を追加するために、ジェネリックな Stack 型を拡張しています。

extension Stack {
    var topItem: Element? {
        return items.isEmpty ? nil : items[items.count - 1]
    }
}

topItem プロパティは、Element 型のオプショナル値を返します。スタックが空の場合には、topItem は nil を返します。スタックが空でない場合には、topItem は配列 items 内の最後のアイテムを返します。

このエクステンションでは、型パラメータリストを定義していないことに注目してください。代わりに、コンピューテッドプロパティ topItem のオプショナル型を示すために、Stack 型の既存の型パラメータ名である Element がエクステンション内で使用されています。

あらゆる Stack インスタンスで、トップのアイテムを削除することなくアクセスするために、コンピューテッドプロパティ topItem を使用できるようになります。

if let topItem = stackOfStrings.topItem {
    print("The top item on the stack is \(topItem).")
}
// "The top item on the stack is tres." と出力

Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.