メソッドが属するインスタンスの変更を必要とする場合があります。値型(つまり、構造体と列挙型)のインスタンスメソッドには、そのメソッドが属するインスタンスとそのインスタンスのプロパティを変更できることを示すために、メソッドの func
キーワードの前に mutating
キーワードを置きます。この処理は Modifying Value Types from Within Instance Methods で説明されています。
プロトコルを採用する型のインスタンスを変更することを目的としたプロトコルのインスタンスメソッド要件を定義する場合には、プロトコルの定義の一部として、メソッドに mutating
キーワードを付けます。これにより、構造体と列挙型がプロトコルを採用し、メソッド要件を満たすことができます。
mutating
を付ける場合、クラスにそのメソッドの実装を記述するときには mutating
キーワードを記述する必要はありません。mutating
キーワードは構造体および列挙型でのみ使用されます。
次の例では、インスタンスメソッド要件 toggle
を定義するプロトコル Togglable
を定義しています。名前が示すように、toggle()
メソッドはトグルすることを目的とし、準拠する型の状態をその型のプロパティを変更することで反転します。
toggle()
メソッドには Togglable
プロトコル定義の一部として mutating
キーワードが付けられていて、そのメソッドが呼びだされたときに、準拠するインスタンスの状態を変化させることを示しています。
protocol Togglable {
mutating func toggle()
}
構造体や列挙型に Togglable
プロトコルを実装する場合、その構造体や列挙型は mutating
と付けられた toggle()
メソッドの実装を提供することでプロトコルに準拠することができます。
次の例では、構造体 OnOffSwitch
を定義しています。この列挙型はケース On
と Off
で示された 2 つの状態を切り替えます。列挙型の toggle
実装には、Togglable
プロトコル要件に準拠させるために mutating
が付けられています。
enum OnOffSwitch: Togglable {
case Off, On
mutating func toggle() {
switch self {
case Off:
self = On
case On:
self = Off
}
}
}
var lightSwitch = OnOffSwitch.Off
lightSwitch.toggle()
// lightSwitch は .On
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.