English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Swiftメソッドは特定のタイプに関連する関数です
Objective-Cでは、クラスはメソッドを定義できる唯一のタイプです。しかし、Swiftでは、クラスを定義するかどうかを選択することができます。/構造体/エnum、そしてあなたが作成したタイプ(クラスなど)に柔軟に適用できます。/構造体/エnum)上にメソッドを定義します。
Swift言語では、サンプルメソッドは特定のクラス、構造体、またはエnumタイプのサンプルに属しています。
サンプルメソッドは以下の方法を提供します:
サンプル属性にアクセスおよび変更できます
サンプルの目的に関連する機能を提供します
サンプルメソッドは、所属するタイプの前後の大括弧({})の間に書かれます。
サンプルメソッドは、所属するタイプのすべての他のサンプルメソッドと属性を暗黙的にアクセスできます。
サンプルメソッドは、所属するクラスの特定のサンプルのみから呼び出すことができます。
サンプルメソッドは、既存のサンプルから独立して呼び出すことはできません。
func funcname(パラメータ) -> 戻り値型 { ステートメント1 ステートメント2 …… ステートメントN return パラメータ }
import Cocoa class Counter { var count = 0 func increment() { count += 1 } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 } } // 初期の計数値は0です let counter = Counter() // 現在の計数値は1 counter.increment() // 現在の計数値は6 counter.incrementBy(amount: 5) print(counter.count) // 現在の計数値は0です counter.reset() print(counter.count)
以下のプログラムの実行結果は:
6 0
Counterクラスは3つの例方法を定義しています:
Counter このクラスは可変属性も宣言しています。 count、現在のカウンタの値を追跡するために使用されます。
Swiftの関数のパラメータには、ローカル名(関数の内部で使用)と外部名(関数を呼び出す際に使用
SwiftのメソッドとObjective-Cのメソッドは非常に似ています。Objective-Cと同様に、Swiftのメソッドの名前は通常、前置詞で最初のパラメータを指し示します。例えば:with、for、byなどです。
Swiftはデフォルトで、メソッドの最初のパラメータにローカルパラメータ名を提供し、デフォルトで2番目以降のパラメータにグローバルパラメータ名を提供します。
以下の例では 'no1「'」はSwiftでローカルパラメータ名として宣言されます。'no2「'」はグローバルな宣言に使用され、外部プログラムからアクセスされます。
import Cocoa class division { var count: Int = 0 func incrementBy(no1: Int, no2: Int) { count = no1 / no2 print(count) } } let counter = division() counter.incrementBy(no1: 1800, no2: 3) counter.incrementBy(no1: 1600, no2: 5) counter.incrementBy(no1: 11000, no2: 3)
以下のプログラムの実行結果は:
600 320 3666
最初のパラメータに外部名を強制的に追加し、このローカル名を外部名として使用します(Swift 2.0前に#記号を使います)。
逆転しておきまして、下記の下線(_)を使って、2番目以降のパラメータに外部名を設定しないこともできます。import Cocoa class multiplication { var count: Int = 0 func incrementBy(first no1: Int, no2: Int) { count = no1 * no2 print(count) } } let counter = multiplication() counter.incrementBy(first: 800, no2: 3) counter.incrementBy(first: 100, no2: 5) counter.incrementBy(first: 15000, no2: 3)
以下のプログラムの実行結果は:
2400 500 45000
各例には self という隠蔽の属性があります。self はその例自身と完全に同じです。
例の例のメソッド内でこの隠蔽の self 属性を使用して現在の例を参照することができます。
import Cocoa class 計算 { let a: Int let b: Int let res: Int init(a: Int, b: Int) { self.a = a self.b = b res = a + b print("Self 内: \(res)") } func tot(c: Int) -> Int { return res - c } func result() { print("結果は: \(tot(c: 20)) print("結果は: \(tot(c: 50)) } } let pri = 計算(a: 600, b: 300) let sum = 計算(a: 1200, b: 300) pri.result() sum.result()
以下のプログラムの実行結果は:
Self 内: 900 Self 内: 1500 結果は: 880 結果は: 850 結果は: 1480 結果は: 1450
Swift 言語では構造体やエnumは値型です。一般的には、値型の属性はその例のメソッド内で変更できません。
しかし、特定のメソッドで構造体やエnumの属性を本当に変更する必要がある場合は、変異(mutating)メソッドを選択することができます。その場合、メソッドは内部から属性を変更することができ、その変更はメソッド終了後に元の構造体に残ります。
メソッドは、その隠蔽の self 属性に新しい例を割り当てることができます。この新しい例はメソッド終了後に元の例に置き換わります。
import Cocoa struct 面積 { var 長さ = 1 var 横幅 = 1 func 面積() -> Int { return 長さ * 横幅 } mutating func scaleBy(res: Int) { 長さ *= res 横幅 *= res print(長さ) print(横幅) } } var val = 面積(長さ: 3, 横幅: 5) val.scaleBy(res: 3) val.scaleBy(res: 30) val.scaleBy(res: 300)
以下のプログラムの実行結果は:
9 15 270 450 81000 135000
変数メソッドは、隠蔽属性 self に新しい例を割り当てることができます。
import Cocoa struct 面積 { var 長さ = 1 var 横幅 = 1 func 面積() -> Int { return 長さ * 横幅 } mutating func scaleBy(res: Int) { self.長さ *= res self.横幅 *= res print(長さ) print(横幅) } } var val = 面積(長さ: 3, 横幅: 5) val.scaleBy(res: 13)
以下のプログラムの実行結果は:
39 65
サンプルメソッドは、特定のタイプのサンプルによって呼び出されるメソッドです。また、タイプ自体が呼び出すメソッドを定義することもできます。このようなメソッドは、タイプメソッドと呼ばれます。
構造体やエnumのメソッドを宣言する際には、funcキーワードの前にstaticキーワードを追加します。クラスはclassキーワードを使用して、サブクラスが親クラスの実装をオーバーライドすることを許可することができます。
クラスメソッドとサンプルメソッドは同じピッチオン・メソッドで呼び出されます。
import Cocoa class Math { class func abs(number: Int) -> Int { if number < 0 { return (-number) } else { return number } } } struct absno { static func abs(number: Int) -> Int { if number < 0 { return (-number) } else { return number } } } let no = Math.abs(number: -35) let num = absno.abs(number: -5) print(no) print(num)
以下のプログラムの実行結果は:
35 5