Swift - metody
W języku Swift 4 Funkcje powiązane z określonymi typami nazywane są metodami. W Objective C klasy są używane do definiowania metod, podczas gdy język Swift 4 zapewnia użytkownikowi elastyczność w zakresie posiadania metod dla klas, struktur i wyliczeń.
Metody instancji
W języku Swift 4 do klas, struktur i wyliczeń można uzyskać dostęp za pośrednictwem metod instancji.
Metody instancji zapewniają funkcjonalność
- Dostęp i modyfikowanie właściwości instancji
- funkcjonalność związana z potrzebą instancji
Metoda instancji może być zapisana w nawiasach klamrowych {}. Ma niejawny dostęp do metod i właściwości wystąpienia typu. Gdy zostanie wywołana konkretna instancja typu, uzyska ona dostęp do tej konkretnej instancji.
Składnia
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
Przykład
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()
Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -
Result is: 880
Result is: 850
Class Calculations definiuje dwie metody instancji -
- init () jest zdefiniowany w celu dodania dwóch liczb a i b i zapisania ich w wyniku 'res'
- tot () służy do odejmowania wartości „res” od przekazywania wartości „c”
Wreszcie, aby wydrukować metody obliczeń z wartościami a i b, jest wywoływana. Dostęp do metod instancji uzyskuje się za pomocą „.” składnia kropkowa
Nazwy parametrów lokalnych i zewnętrznych
Funkcje Swift 4 opisują zarówno lokalne, jak i globalne deklaracje swoich zmiennych. Podobnie, konwencje nazewnictwa metod Swift 4 są również podobne do konwencji Celu C. Jednak właściwości deklaracji nazw parametrów lokalnych i globalnych są różne dla funkcji i metod. Pierwszy parametr w Swift 4 jest określany przez nazwy przyimków jako „with”, „for” i „by” w celu ułatwienia dostępu do konwencji nazewnictwa.
Swift 4 zapewnia elastyczność metod poprzez deklarowanie nazwy pierwszego parametru jako lokalnych nazw parametrów, a pozostałe nazwy parametrów jako nazwy globalne. Tutaj „no1” jest zadeklarowane przez metody Swift 4 jako lokalne nazwy parametrów. „no2” jest używane do deklaracji globalnych i dostępne za pośrednictwem programu.
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)
Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -
600
320
3666
Nazwa parametru zewnętrznego z # i _ Symbolem
Mimo że metody Swift 4 zapewniają nazwy pierwszych parametrów dla deklaracji lokalnych, użytkownik ma możliwość modyfikowania nazw parametrów z deklaracji lokalnych na globalne. Można to zrobić, poprzedzając symbol „#” nazwą pierwszego parametru. W ten sposób pierwszy parametr jest dostępny globalnie w modułach.
Gdy użytkownik potrzebuje dostępu do kolejnych nazw parametrów z nazwą zewnętrzną, nazwa metody jest nadpisywana za pomocą symbolu „_”.
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)
Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -
2400
500
45000
Własność własna w metodach
Metody mają niejawną właściwość znaną jako „self” dla wszystkich jej zdefiniowanych wystąpień typu. Właściwość „Self” służy do odwoływania się do bieżących instancji w celu określenia ich metod.
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()
Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
Modyfikowanie typów wartości z metod instancji
W języku Swift 4 struktury i wyliczenia należą do typów wartości, których nie można zmienić za pomocą metod instancji. Jednak język Swift 4 zapewnia elastyczność w modyfikowaniu typów wartości poprzez „mutowanie” zachowania. Mutate dokona wszelkich zmian w metodach instancji i powróci do pierwotnej postaci po wykonaniu metody. Ponadto właściwość „self” tworzy nową instancję dla jej niejawnej funkcji i zastępuje istniejącą metodę po jej wykonaniu
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)
Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -
9
15
270
450
81000
135000
Własność metody mutacji
Mutowanie metod w połączeniu z właściwością „self” przypisuje nową instancję do zdefiniowanej metody.
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)
Uruchamiając powyższy program za pomocą placu zabaw, otrzymujemy następujący wynik. -
39
65
Metody typu
Gdy wywoływana jest określona instancja metody, jest ona wywoływana jako metoda instancji; a kiedy metoda wywołuje określony typ metody, jest nazywana „Metody typu”. Metody typu dla „klas” są definiowane za pomocą słowa kluczowego „func”, a struktury i metody typu wyliczeń są definiowane za pomocą słowa kluczowego „static” przed słowem kluczowym „func”.
Metody typu są wywoływane i dostępne przez '.' składnia, w której zamiast wywoływać określoną instancję, wywoływana jest cała metoda.
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)
Uruchamiając powyższy program za pomocą placu zabaw, otrzymujemy następujący wynik. -
35
5