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