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