Swift - Metodi
Nel linguaggio Swift 4 le funzioni associate a tipi particolari vengono chiamate metodi. In Objective C le classi vengono utilizzate per definire i metodi, mentre il linguaggio Swift 4 fornisce all'utente la flessibilità di disporre di metodi per classi, strutture ed enumerazioni.
Metodi di istanza
Nel linguaggio Swift 4, si accede alle istanze di classi, strutture ed enumerazioni tramite i metodi dell'istanza.
I metodi di istanza forniscono funzionalità
- Per accedere e modificare le proprietà dell'istanza
- funzionalità relative alle necessità dell'istanza
Il metodo di istanza può essere scritto all'interno delle parentesi graffe {}. Ha accesso implicito ai metodi e alle proprietà dell'istanza del tipo. Quando viene chiamata un'istanza specifica del tipo, avrà accesso a quella particolare istanza.
Sintassi
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
Esempio
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
}
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)
pri.result()
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Result is: 880
Result is: 850
Calcoli di classe definisce due metodi di istanza:
- init () è definito per aggiungere due numeri aeb e memorizzarli nel risultato 'res'
- tot () viene utilizzato per sottrarre il valore "res" dal passaggio del valore "c"
Infine, per stampare i metodi di calcolo con valori per aeb viene chiamato. Si accede ai metodi di istanza con "." sintassi dei punti
Nomi dei parametri locali ed esterni
Le funzioni di Swift 4 descrivono le dichiarazioni locali e globali per le loro variabili. Allo stesso modo, anche le convenzioni di denominazione di Swift 4 Methods assomigliano a quelle dell'obiettivo C. Ma le caratteristiche delle dichiarazioni dei nomi dei parametri locali e globali sono diverse per funzioni e metodi. Il primo parametro in Swift 4 è indicato dai nomi di preposizione come "con", "per" e "per" per convenzioni di denominazione di facile accesso.
Swift 4 offre la flessibilità nei metodi dichiarando il nome del primo parametro come nomi di parametri locali e i nomi dei parametri rimanenti come nomi di parametri globali. Qui "no1" viene dichiarato dai metodi Swift 4 come nomi di parametri locali. 'no2' viene utilizzato per le dichiarazioni globali e vi si accede tramite il programma.
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)
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
600
320
3666
Nome parametro esterno con # e simbolo _
Anche se i metodi Swift 4 forniscono i primi nomi dei parametri per le dichiarazioni locali, l'utente ha la possibilità di modificare i nomi dei parametri dalle dichiarazioni locali a quelle globali. Questo può essere fatto anteponendo il simbolo "#" al nome del primo parametro. In questo modo, è possibile accedere al primo parametro globalmente in tutti i moduli.
Quando l'utente deve accedere ai nomi dei parametri successivi con un nome esterno, il nome del metodo viene sovrascritto con l'aiuto del simbolo "_".
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)
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
2400
500
45000
Proprietà personale nei metodi
I metodi hanno una proprietà implicita nota come "self" per tutte le sue istanze di tipo definite. La proprietà 'Self' viene utilizzata per fare riferimento alle istanze correnti per i metodi definiti.
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("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()
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
Modifica dei tipi di valore dai metodi di istanza
In Swift 4 le strutture linguistiche e le enumerazioni appartengono a tipi di valore che non possono essere modificati dai suoi metodi di istanza. Tuttavia, il linguaggio Swift 4 offre flessibilità per modificare i tipi di valore "mutando" il comportamento. Mutate apporterà eventuali modifiche ai metodi dell'istanza e tornerà alla forma originale dopo l'esecuzione del metodo. Inoltre, dalla proprietà "self" viene creata una nuova istanza per la sua funzione implicita e sostituirà il metodo esistente dopo la sua esecuzione
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)
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato:
9
15
270
450
81000
135000
Proprietà personale per il metodo mutante
La modifica dei metodi combinati con la proprietà 'self' assegna una nuova istanza al metodo definito.
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)
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato. -
39
65
Metodi di tipo
Quando viene chiamata una particolare istanza di un metodo, viene chiamata come metodo Instance; e quando il metodo chiama un particolare tipo di metodo, viene chiamato "Type Methods". I metodi di tipo per le "classi" sono definiti dalla parola chiave "func" e i metodi di tipo per strutture ed enumerazioni sono definiti con la parola chiave "static" prima della parola chiave "func".
I metodi di tipo vengono chiamati e acceduti da "." sintassi in cui invece di chiamare una particolare istanza viene invocato l'intero metodo.
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)
Quando eseguiamo il programma precedente usando playground, otteniamo il seguente risultato. -
35
5