Swift - Métodos
Na linguagem Swift 4, as funções associadas a tipos específicos são chamadas de métodos. Em Objective C Classes são usadas para definir métodos, enquanto a linguagem Swift 4 fornece ao usuário flexibilidade para ter métodos para Classes, Estruturas e Enumerações.
Métodos de Instância
Na linguagem Swift 4, as instâncias de Classes, Structures e Enumeration são acessadas através dos métodos de instância.
Métodos de instância fornecem funcionalidade
- Para acessar e modificar as propriedades da instância
- funcionalidade relacionada à necessidade da instância
O método de instância pode ser escrito dentro das {} chaves. Ele tem acesso implícito a métodos e propriedades da instância do tipo. Quando uma instância específica do tipo é chamada, ela obterá acesso a essa instância específica.
Sintaxe
func funcname(Parameters) -> returntype {
Statement1
Statement2
---
Statement N
return parameters
}
Exemplo
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 executamos o programa acima usando playground, obtemos o seguinte resultado -
Result is: 880
Result is: 850
Class Calculations define dois métodos de instância -
- init () é definido para adicionar dois números aeb e armazená-los no resultado 'res'
- tot () é usado para subtrair o 'res' de passar o valor 'c'
Finalmente, para imprimir os métodos de cálculos com valores para a e b é chamado. Os métodos de instância são acessados com '.' sintaxe de ponto
Nomes de parâmetros locais e externos
As funções do Swift 4 descrevem declarações locais e globais para suas variáveis. Da mesma forma, as convenções de nomenclatura dos Métodos do Swift 4 também se parecem com as do Objetivo C. Mas as características das declarações de nomes de parâmetros locais e globais são diferentes para funções e métodos. O primeiro parâmetro no Swift 4 são referidos por nomes de preposição como 'com', 'para' e 'por' para facilitar o acesso às convenções de nomenclatura.
O Swift 4 fornece flexibilidade nos métodos, declarando o primeiro nome do parâmetro como nomes de parâmetros locais e os nomes de parâmetros restantes como nomes de parâmetros globais. Aqui, 'no1' é declarado pelos métodos Swift 4 como nomes de parâmetros locais. 'no2' é usado para declarações globais e acessado por meio do programa.
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 executamos o programa acima usando playground, obtemos o seguinte resultado -
600
320
3666
Nome do parâmetro externo com # e símbolo _
Mesmo que os métodos do Swift 4 forneçam primeiros nomes de parâmetro para declarações locais, o usuário tem a possibilidade de modificar os nomes de parâmetro de declarações locais para globais. Isso pode ser feito prefixando o símbolo '#' com o primeiro nome do parâmetro. Ao fazer isso, o primeiro parâmetro pode ser acessado globalmente em todos os módulos.
Quando o usuário precisa acessar os nomes dos parâmetros subsequentes com um nome externo, o nome do método é substituído com a ajuda do símbolo '_'.
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 executamos o programa acima usando playground, obtemos o seguinte resultado -
2400
500
45000
Propriedade própria em métodos
Os métodos têm uma propriedade implícita conhecida como 'self' para todas as suas instâncias de tipo definidas. A propriedade 'Self' é usada para referir as instâncias atuais para seus métodos definidos.
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 executamos o programa acima usando playground, obtemos o seguinte resultado -
Inside Self Block: 900
Inside Self Block: 1500
Result is: 880
Result is: 850
Result is: 1480
Result is: 1450
Modificando Tipos de Valor de Métodos de Instância
Na linguagem Swift 4, as estruturas e enumerações pertencem a tipos de valor que não podem ser alterados por seus métodos de instância. No entanto, a linguagem Swift 4 fornece flexibilidade para modificar os tipos de valor por 'mutação' do comportamento. Mutate fará qualquer alteração nos métodos de instância e retornará à forma original após a execução do método. Além disso, pela propriedade 'self' uma nova instância é criada para sua função implícita e irá substituir o método existente após sua execução
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 executamos o programa acima usando playground, obtemos o seguinte resultado -
9
15
270
450
81000
135000
Propriedade própria para método mutante
Métodos mutantes combinados com a propriedade 'self' atribuem uma nova instância ao método definido.
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 executamos o programa acima usando playground, obtemos o seguinte resultado. -
39
65
Métodos de Tipo
Quando uma determinada instância de um método é chamada, ela é chamada como um método de Instância; e quando o método chama um tipo específico de método, ele é chamado de 'Métodos de tipo'. Os métodos de tipo para 'classes' são definidos pela palavra-chave 'func' e os métodos de tipo de estruturas e enumerações são definidos com a palavra-chave 'estática' antes da palavra-chave 'func'.
Os métodos de tipo são chamados e acessados por '.' sintaxe onde, em vez de chamar uma instância particular, todo o método é invocado.
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 executamos o programa acima usando playground, obtemos o seguinte resultado. -
35
5