Swift - Методы
В языке Swift 4 функции, связанные с определенными типами, называются методами. В Objective C классы используются для определения методов, тогда как язык Swift 4 обеспечивает пользователю гибкость в использовании методов для классов, структур и перечислений.
Методы экземпляра
В языке Swift 4 доступ к экземплярам классов, структур и перечислений осуществляется через методы экземпляра.
Методы экземпляра обеспечивают функциональность
- Для доступа и изменения свойств экземпляра
- функциональность, связанная с потребностями экземпляра
Метод экземпляра можно записать внутри фигурных скобок {}. Он имеет неявный доступ к методам и свойствам экземпляра типа. Когда вызывается конкретный экземпляр типа, он получает доступ к этому конкретному экземпляру.
Синтаксис
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
пример
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()
Когда мы запускаем вышеуказанную программу с помощью игровой площадки, мы получаем следующий результат -
Result is: 880
Result is: 850
Вычисления классов определяют два метода экземпляра -
- init () определен для сложения двух чисел a и b и сохранения их в результате 'res'
- tot () используется для вычитания res из передаваемого значения c
Наконец, для печати вызываются методы вычислений со значениями a и b. Доступ к методам экземпляра осуществляется через '.' точечный синтаксис
Имена локальных и внешних параметров
Функции Swift 4 описывают как локальные, так и глобальные объявления своих переменных. Точно так же соглашения об именах методов Swift 4 также похожи на соглашения об именах в Objective C. Но характеристики объявлений имен локальных и глобальных параметров различны для функций и методов. Первый параметр в Swift 4 обозначается именами предлогов как 'with', 'for' и 'by' для облегчения доступа к соглашениям об именах.
Swift 4 обеспечивает гибкость в методах, объявляя имя первого параметра как имена локальных параметров, а имена остальных параметров - как имена глобальных параметров. Здесь 'no1' объявлено методами Swift 4 как имена локальных параметров. 'no2' используется для глобальных деклараций и доступно из программы.
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
Имя внешнего параметра с символом # и _
Несмотря на то, что методы Swift 4 предоставляют первые имена параметров для локальных объявлений, у пользователя есть возможность изменить имена параметров с локальных на глобальные объявления. Это можно сделать, добавив к имени первого параметра префикс символа «#». Таким образом, к первому параметру можно будет получить доступ глобально во всех модулях.
Когда пользователю необходимо получить доступ к последующим именам параметров с внешним именем, имя метода переопределяется с помощью символа «_».
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)
Когда мы запускаем вышеуказанную программу с помощью игровой площадки, мы получаем следующий результат -
2400
500
45000
Свойство Self в методах
У методов есть неявное свойство, известное как «я» для всех экземпляров определенного типа. Свойство Self используется для ссылки на текущие экземпляры для его определенных методов.
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()
Когда мы запускаем вышеуказанную программу с помощью игровой площадки, мы получаем следующий результат -
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
Изменение типов значений из методов экземпляра
В Swift 4 языковые структуры и перечисления относятся к типам значений, которые не могут быть изменены с помощью методов экземпляра. Однако язык Swift 4 обеспечивает гибкость для изменения типов значений путем «изменения» поведения. Mutate внесет любые изменения в методы экземпляра и вернется к исходной форме после выполнения метода. Кроме того, с помощью свойства self создается новый экземпляр для его неявной функции, который заменит существующий метод после его выполнения.
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
Собственная собственность для метода мутации
Мутирующие методы в сочетании со свойством self назначают новый экземпляр определенному методу.
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
Типовые методы
Когда вызывается конкретный экземпляр метода, он вызывается как метод экземпляра; и когда метод вызывает определенный тип метода, он называется «методами типа». Методы типов для 'классов' определяются ключевым словом 'func', а методы типов структур и перечислений определяются с помощью ключевого слова 'static' перед ключевым словом 'func'.
Методы типа вызываются и доступны через '.' синтаксис, в котором вместо вызова конкретного экземпляра вызывается весь метод.
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