English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift メソッド

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つの例方法を定義しています:

  • increment カウンタを 1 増加させます;
  • incrementBy(amount: Int) 指定された整数値でカウンタを増加させます;
  • reset カウンタを0にリセットします。

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 はその例自身と完全に同じです。

例の例のメソッド内でこの隠蔽の 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 に値を割り当てる

変数メソッドは、隠蔽属性 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