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

Swift 方法

I metodi di Swift sono funzioni associate a tipi specifici

In Objective-C, la classe è l'unico tipo che può definire un metodo. Ma in Swift, oltre a poter scegliere se definire una classe/struttura/enumerazione, puoi definire metodi in modo flessibile sui tipi che crei (classe/struttura/enumerazione).

Metodo di esempio

Nei linguaggi di programmazione Swift, i metodi di esempio appartengono ai metodi degli esempi di una classe, una struttura o un tipo enumerativo specifico.

I metodi di esempio forniscono i seguenti metodi:

  • Possono accedere e modificare gli attributi dell'esempio

  • Forniscono funzionalità correlate all'obiettivo dell'esempio

I metodi di esempio devono essere scritti tra le parentesi graffe ({}) del tipo di appartenenza.

I metodi di esempio possono accedere implicitamente a tutti gli altri metodi e attributi del tipo di appartenenza.

I metodi di esempio possono essere chiamati solo da un esempio specifico della classe di appartenenza.

I metodi di esempio non possono essere chiamati indipendentemente dagli esempi esistenti.

Sintassi

func funcname(Parameters) -> returntype
{
    Stato1
    Stato2
    ……
    Stato N
    return parameters
}

Esempio online

import Cocoa
class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func incrementBy(amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}
// Il valore iniziale di conteggio è 0
let counter = Counter()
// Il valore di conteggio è ora 1
counter.increment()
// Il valore di conteggio è ora 6
counter.incrementBy(amount: 5)
print(counter.count)
// Il valore di conteggio è ora 0
counter.reset()
print(counter.count)

以上程序执行輸出結果為:

6
0

La classe Counter definisce tre metodi di esempio:

  • increment Aumenta il contatore di 1;
  • incrementBy(amount: Int) Aumenta il contatore di un valore intero specificato;
  • reset Ripristina il contatore a 0.

Counter Questa classe dichiara anche un attributo variabile countper mantenere traccia del valore corrente del contatore.

Il nome locale del parametro del metodo e il nome esterno del parametro

I parametri dei funzioni in Swift possono avere contemporaneamente un nome locale (usato all'interno del corpo della funzione) e un nome esterno (usato durante la chiamata della funzione

I metodi in Swift sono estremamente simili ai metodi in Objective-C. Come in Objective-C, i nomi dei metodi in Swift sono solitamente preceduti da un preposizione che indica il primo parametro del metodo, come: con, per, da, ecc.

Swift predefinisce di dare un nome locale al primo parametro di un metodo; predefinisce di dare nomi globali ai parametri successivi e a due.

Nell'esempio seguente, 'no1' viene dichiarato come nome di parametro locale in Swift. 'no2' viene utilizzato per la dichiarazione globale e l'accesso da parte del programma esterno.

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

Fornitura di un nome esterno

Obblighiamo l'aggiunta di un nome esterno al primo parametro per utilizzare questo nome locale come nome esterno (prima di Swift 2.0 si usava il #).

Invece, possiamo anche utilizzare l'underscore (_ ) per impostare il nome esterno dei parametri successivi non forniti.

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

Proprietà self

Ogni esempio di tipo ha una proprietà implicita chiamata self, self è completamente equivalente all'istanza stessa.

Puoi utilizzare questa proprietà implicita self in un metodo di esempio per riferirti all'istanza corrente.

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("Il risultato è: \(tot(c: 20))")
        print("Il risultato è: \(tot(c: 50))")
    }
}
let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()

以上程序执行輸出結果為:

Self interno: 900
Self interno: 1500
Il risultato è: 880
Il risultato è: 850
Il risultato è: 1480
Il risultato è: 1450

Modificare i tipi di valore nei metodi di esempio

In Swift, le strutture e gli enumeratori sono tipi di valore. Di solito, le proprietà dei tipi di valore non possono essere modificate nei loro metodi di esempio.

Ma se hai davvero bisogno di modificare le proprietà di una struttura o di un enumeratore in un metodo specifico, puoi scegliere di mutare questo metodo, quindi il metodo può modificare i suoi attributi dall'interno; e qualsiasi modifica fatta verrà conservata nella struttura originale alla fine del metodo.

Il metodo può assegnare all'attributo implicito self un nuovo esempio completo, che sostituirà l'esempio originale alla fine del metodo.

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

以上程序执行輸出結果為:

9
15
270
450
81000
135000

Assegnazione di self nel metodo mutabile

I metodi mutabili possono assegnare all'attributo implicito self un nuovo esempio completo.

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

以上程序执行輸出結果為:

39
65

Metodo di tipo

Il metodo di esempio è chiamato da un esempio di tipo, puoi anche definire un metodo chiamato dal tipo stesso, che si chiama metodo di tipo.

聲明結構體和枚舉的類型方法,在方法的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