迅速な方法


Swift メソッドは特定の型に関連付けられた関数です

Objective-C では、メソッドを定義できる型はクラスだけです。しかし、Swift では、クラス/構造体/列挙体を定義するかどうかを選択できるだけでなく、作成した型 (クラス/構造体/列挙体) のメソッドを柔軟に定義することもできます。


インスタンス メソッド

Swift 言語では、インスタンス メソッドは、特定のクラス、構造体、または列挙型のインスタンスに属するメソッドです。

インスタンスメソッドは以下のメソッドを提供します:

  • インスタンスのプロパティにアクセスして変更することができます

  • インスタンスの目的に関連する関数を提供します

インスタンスメソッドは、中括弧({})で囲んで記述します間に属するタイプ。

インスタンス メソッドは、その型の他のすべてのインスタンス メソッドとプロパティに暗黙的にアクセスできます。

インスタンス メソッドは、それが属するクラスの特定のインスタンスによってのみ呼び出すことができます。

インスタンス メソッドは、既存のインスタンスから独立して呼び出すことはできません。

構文

func funcname(Parameters) -> returntype
{
    Statement1
    Statement2
    ……
    Statement N
    return parameters
}

インスタンス

import Cocoa

class Counter {
    var count = 0
    func increment() {
        count++
    }
    func incrementBy(amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}
// 初始计数值是0
let counter = Counter()

// 计数值现在是1
counter.increment()

// 计数值现在是6
counter.incrementBy(5)
print(counter.count)

// 计数值现在是0
counter.reset()
print(counter.count)

上記のプログラムの実行出力は次のとおりです:

6
0

Counter クラスは 3 つのインスタンス メソッドを定義します。

  • increment はカウンターを 1 つインクリメントします。 increment让计数器按一递增;

  • incrementBy(amount: Int)让计数器按一个指定的整数值递增;

  • reset将计数器重置为0。

Counter这个类还声明了一个可变属性count

incrementBy(amount: Int) 指定された整数値だけカウンタをインクリメントします。

reset カウンタを 0 にリセットします。

Counterこのクラスは、現在のカウンター値を追跡するために使用される可変属性 count も宣言します。

メソッドのローカルパラメータ名と外部パラメータ名

Swift 関数のパラメータには、ローカル名 (関数本体内で使用) と外部名 (関数呼び出し時に使用) の両方を付けることができます

Swift と Objective-C のメソッドSwift のメソッドは非常によく似ています。Objective-C と同様に、Swift のメソッド名は通常、with、for、by などのように、メソッドの最初のパラメータを指す前置詞を使用します。

Swift のデフォルトは次のとおりです。メソッドの最初のパラメーターのみ。1 つのパラメーター名と 1 つのローカル パラメーター名。デフォルトでは、2 番目以降のパラメーター名がグローバル パラメーター名として指定されます。次の例では、「no1」がローカル パラメーター名として宣言されます。

import Cocoa

class division {
    var count: Int = 0
    func incrementBy(no1: Int, no2: Int) {
        count = no1 / no2
        print(count)
    }
}

let counter = division()
counter.incrementBy(1800, no2: 3)
counter.incrementBy(1600, no2: 5)
counter.incrementBy(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)

self 属性

型の各インスタンスには self という暗黙的な属性があり、これはインスタンス自体とまったく同じです。

この暗黙的な self 属性をインスタンス メソッドで使用して、現在のインスタンスを参照できます。

上記のプログラム実行の出力結果は次のとおりです。
2400
500
45000

インスタンスメソッドの値型を変更する

Swift言語における構造体や列挙型は値型です。一般に、値型のプロパティは、そのインスタンス メソッド内で変更できません。

ただし、特定のメソッドの構造体または列挙のプロパティを変更する必要がある場合は、メソッドを変更することを選択できます。その後、メソッドはメソッド内からプロパティを変更でき、変更はそのまま残ります。メソッドの最後にある元の構造内。

メソッドは、暗黙的な self 属性に新しいインスタンスを割り当てることもできます。この新しいインスタンスは、メソッドの終了後に元のインスタンスを置き換えます。

import Cocoa

class calculations {
    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(20))")
        print("结果为: \(tot(50))")
    }
}

let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)

pri.result()
sum.result()

上記のプログラムの実行出力は次のとおりです:

Self 内: 900
Self 内: 1500
结果为: 880
结果为: 850
结果为: 1480
结果为: 1450

変数メソッドでの self への値の代入

変数メソッドは、暗黙的な属性 self に新しいインスタンスを割り当てることができます。

import Cocoa

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(3)
val.scaleBy(30)
val.scaleBy(300)

上記のプログラムの実行出力は次のとおりです。

9
15
270
450
81000
135000

型メソッド

インスタンス メソッドは、型のインスタンスによって呼び出されるメソッドです。このメソッドは、型自体によって呼び出されるメソッドを定義することもできます。タイプメソッド。

構造体と列挙型の型メソッドを宣言し、メソッドの func キーワードの前にキーワード static を追加します。クラスはキーワード class を使用して、サブクラスが親クラスの実装メソッドをオーバーライドできるようにすることができます。

Type メソッドは、インスタンス メソッドと同様にドット (.) 構文で呼び出されます。

import Cocoa

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(13)

上記のプログラムの実行の出力結果は次のとおりです:

39
65