Contents

スイフト- メソッド
Swiftでは、クラスだけでなく、構造体や列挙型にもメソッド(関数)を持たせることができます。また、Objective-Cのクラスメソッドにあたる型メソッドも、クラス、構造体、列挙型に持たせることができます。
インスタンスメソッド
Swift 4の言語で、Classes、Structures、Enumerationインスタンスはインスタンスメソッドを通じてアクセスされます。
インスタンスメソッドは機能を提供します
- インスタンスのプロパティにアクセスして変更する
- インスタンスの必要性に関連する機能
インスタンスメソッドは{}の中括弧の中に書くことができます。これは、型インスタンスのメソッドとプロパティへの暗黙のアクセスを持ちます。型の特定のインスタンスが呼び出されると、その特定のインスタンスにアクセスします。
構文
func funcname(Parameters) -> returntype { Statement1 Statement2 --- Statement N return parameters }
例
class calculations { let a: Int let b: Int let res: Int init(a: Int, b: Int) { //init()は、2つの数値aとbを加算し結果 'res'に格納するように定義されています。 self.a = a self.b = b res = a + b } func tot(c: Int) -> Int { //tot()は 'res'から 'c'の値を引くのに使うために使われます return res - c } func result() { print("Result is: \(tot(c: 20))") print("Result is: \(tot(c: 50))") } } let pri = calculations(a: 600, b: 300) pri.result()
次の結果が得られます。
Result is: 880
Result is: 850
クラス計算は2つのインスタンスメソッドを定義します –
- init()は、2つの数値aとbを加算し、結果 ‘res’に格納するように定義されています。
- tot()は ‘res’から ‘c’の値を引くのに使うために使われます
最後に、aとbの値を持つ計算メソッドを表示するために呼び出されます。
ローカルおよび外部パラメータ名
Swift 4関数は、変数のローカル宣言とグローバル宣言の両方を記述します。同様に、Swift 4の命名規則もObjective Cの命名規則と似ていますが、ローカルおよびグローバルのパラメータ名宣言の特性は、関数とメソッドによって異なります。
Swift 4の最初のパラメータは、命名規則に簡単にアクセスできるように、 ‘with’、 ‘for’、 ‘by’などの前置詞名で参照されます。
Swift 4は、最初のパラメータ名をローカルパラメータ名として、残りのパラメータ名をグローバルパラメータ名として宣言することにより、メソッドの柔軟性を提供します。
ここで ‘no1’はローカルパラメータ名としてSwift 4のメソッドで宣言されています。’no2’はグローバル宣言に使用され、プログラムからアクセスされます。
class division { var count: Int = 0 func incrementBy(no1: Int, no2: Int) { //Swift 4の最初のパラメータは'with'、 'for'、 'by'などの前置詞名で参照されます。ローカル 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 4メソッドはローカル宣言の最初のパラメータ名を提供しますが、ユーザーはローカルからグローバル宣言にパラメータ名を変更するための規定を持っています。
これは ‘#’記号の先頭に第1のパラメータ名を付けることによって行うことができます。これにより、モジュール全体で最初のパラメータにグローバルにアクセスできます。
class multiplication { var count: Int = 0 func incrementBy(no1: Int, no2: Int) { count = no1 * no2 print(count) } } let counter = multiplication() counter.incrementBy(no1: 800, no2: 3) counter.incrementBy(no1: 100, no2: 5) counter.incrementBy(no1: 15000, no2: 3)
次の結果が得られます。
2400 500 45000
メソッドのSELFプロパティ
メソッドには、定義されたすべての型インスタンスに対して ‘self’として知られる暗黙のプロパティがあります。’Self’プロパティは、定義されたメソッドの現在のインスタンスを参照するために使用されます。
自分のクラス内の何かにアクセスしたい時に使います。
class calculations { let a: Int let b: Int let res: Int init(a: Int, b: Int) { self.a = a //上の a b を参照 self.b = b res = a + b print("Inside Self Block: \(res)") } func tot(c: Int) -> Int { return res - c } func result() { print("Result is: \(tot(c: 20))") print("Result is: \(tot(c: 50))") } } let pri = calculations(a: 600, b: 300) let sum = calculations(a: 1200, b: 300) pri.result() sum.result()
次の結果が得られます。
Inside Self Block: 900 Inside Self Block: 1500 Result is: 880 Result is: 850 Result is: 1480 Result is: 1450
インスタンスメソッドからの値型の変更 mutating func
Swift 4では、言語構造と列挙型は、そのインスタンスメソッドによって変更できない値型に属しています。しかし、振る舞いを「変更」することによって値の型を変更することができます
Mutateはインスタンスメソッドの変更を行い、メソッドの実行後に元のフォームに戻ります。
‘self’プロパティによって、新しいインスタンスはその暗黙の関数用に作成され、実行後に既存のメソッドを置き換えます
struct area { var length = 1 var breadth = 1 func area() -> Int { return length * breadth } mutating func scaleBy(res: Int) { length *= res breadth *= res print(length) print(breadth) } } var val = area(length: 3, breadth: 5) val.scaleBy(res: 3) val.scaleBy(res: 30) val.scaleBy(res: 300)
次の結果が得られます。
9 15 270 450 81000 135000
‘self’プロパティと組み合わせたメソッドの変更
‘self’プロパティと組み合わせたメソッドの変更は、定義されたメソッドに新しいインスタンスを割り当てます。
struct area { var length = 1 var breadth = 1 func area() -> Int { return length * breadth } mutating func scaleBy(res: Int) { self.length *= res self.breadth *= res print(length) print(breadth) } } var val = area(length: 3, breadth: 5) val.scaleBy(res: 13)
次の結果が得られます。
39 65
型メソッド
メソッドの特定のインスタンスが呼び出されると、インスタンスメソッドとして呼び出されます。
メソッドが特定の型のメソッドを呼び出すときは、型のメソッドと呼ばれます。’クラス’の型メソッドは ‘func’キーワードで定義され、構造体と列挙型の型メソッドは ‘func’キーワードの前に ‘static’キーワードで定義されます。
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