Kaedah pantas


Kaedah Swift ialah fungsi yang dikaitkan dengan beberapa jenis tertentu

Dalam Objektif-C, kelas ialah satu-satunya jenis yang boleh menentukan kaedah. Tetapi dalam Swift, anda bukan sahaja boleh memilih sama ada untuk menentukan kelas/struktur/penghitungan, tetapi juga menentukan kaedah secara fleksibel pada jenis (kelas/struktur/penghitungan) yang anda buat.


Kaedah contoh

Dalam bahasa Swift, kaedah contoh ialah kaedah yang tergolong dalam tika kelas, struktur atau jenis penghitungan tertentu.

Kaedah contoh menyediakan kaedah berikut:

  • boleh mengakses dan mengubah suai sifat contoh

  • Menyediakan fungsi yang berkaitan dengan tujuan contoh

kaedah tika hendaklah ditulis antara kurungan kerinting di sekeliling ({}) daripada jenis yang dimilikinya.

Kaedah tika boleh secara tersirat mengakses semua kaedah tika lain dan sifat jenisnya.

Kaedah contoh hanya boleh dipanggil oleh tika tertentu kelas yang dimilikinya.

Kaedah tika tidak boleh dipanggil secara bebas daripada tika sedia ada.

Syntax

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

Instance

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)

Output pelaksanaan program di atas ialah:

6
0

Kelas Counter mentakrifkan tiga kaedah contoh:

  • incrementMenaikkan pembilang sebanyak satu;

  • Tetapkan semula pembilang kepada 0.
  • incrementBy(amount: Int)

  • Kelas ini juga mengisytiharkan atribut boleh ubah
  • , yang digunakan untuk menjejaki nilai pembilang semasa.

    reset

    Nama parameter tempatan dan nama parameter luaran kaedah
Parameter fungsi Swift boleh mempunyai kedua-dua nama tempatan (digunakan di dalam badan fungsi) dan nama luaran (digunakan semasa memanggil fungsi

CounterKaedah dalam Swift sangat serupa dengan kaedah dalam Objektif-C, seperti dalam Objektif-C, nama kaedah dalam Swift biasanya menunjukkan parameter pertama kaedah dengan preposisi, seperti: dengan. , untuk. , oleh, dsb. count

Swift hanya memberikan nama parameter pertama kaedah secara lalai, ia juga memberikan nama parameter global berikut , 'no1' diisytiharkan sebagai nama parameter tempatan dalam Swift 'no2' digunakan untuk pengisytiharan global dan akses melalui program luaran
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)

Keluaran program di atas ialah:

600
320
3666

. Sama ada. Menyediakan tetapan nama luaran

Kami memaksa menambah nama luaran pada parameter pertama untuk menggunakan nama tempatan ini sebagai nama luaran (sebelum Swift 2.0, tanda # digunakan sebaliknya, kami juga boleh). gunakan garis bawah. (_) Tetapkan parameter kedua dan seterusnya tanpa memberikan nama luaran >Anda boleh menggunakan atribut diri tersirat ini dalam kaedah contoh bagi contoh semasa.

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)

Ubah suai jenis nilai dalam kaedah contoh

Struktur dan penghitungan dalam bahasa Swift ialah jenis nilai. Secara umum, sifat jenis nilai tidak boleh diubah suai dalam kaedah contohnya.

Walau bagaimanapun, jika anda benar-benar perlu mengubah suai sifat struktur atau penghitungan dalam kaedah tertentu, anda boleh memilih untuk mengubah kaedah, dan kemudian kaedah itu boleh mengubah sifatnya dari dalam kaedah tersebut; ia membuat akan kekal dalam struktur asal pada akhir kaedah. Kaedah

juga boleh menetapkan tika baharu kepada atribut kendiri tersiratnya ini akan menggantikan tika asal selepas kaedah tamat.

2400
500
45000

Hasil keluaran pelaksanaan program di atas ialah:

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

Tetapkan nilai kepada diri dalam kaedah pembolehubah

Kaedah pembolehubah boleh menetapkan nilai baharu kepada contoh diri atribut tersirat.

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

Output pelaksanaan program di atas ialah:

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)

Kaedah jenis

Kaedah instance ialah kaedah yang dipanggil oleh tika jenis tersebut tentukan jenis Kaedah yang dipanggil dengan sendirinya dipanggil kaedah jenis.

Isytiharkan jenis kaedah struktur dan penghitungan, dan tambahkan kata kunci statik sebelum kata kunci fungsi kaedah tersebut. Kelas boleh menggunakan kelas kata kunci untuk membenarkan subkelas mengatasi kaedah pelaksanaan kelas induk.

Kaedah jenis dipanggil dengan sintaks titik (.) sama seperti kaedah contoh.

9
15
270
450
81000
135000

Hasil keluaran pelaksanaan program di atas ialah:

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)