スイフト- メソッド

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------


スイフト- メソッド


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









前のページ 次のページ

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。