Swift Métodos
Los métodos de Swift son funciones asociadas con ciertos tipos específicos.
En Objective-C, la clase es el único tipo que puede definir métodos. Pero en Swift, no solo puedes elegir si definir una clase/estructura/enumeración, sino que también puedes definir métodos de manera flexible en el tipo que crees (clase/estructura/enumeración).
Métodos de instancia
En el lenguaje Swift, los métodos de instancia son métodos que pertenecen a una instancia de una clase, estructura o enumeración específica.
Los métodos de instancia ofrecen lo siguiente:
Pueden acceder y modificar las propiedades de la instancia.
Proporcionan funcionalidad relacionada con el propósito de la instancia.
Los métodos de instancia deben escribirse entre las llaves ({}) del tipo al que pertenecen.
Los métodos de instancia pueden acceder implícitamente a todos los demás métodos de instancia y propiedades de su tipo.
Un método de instancia solo puede ser llamado por una instancia específica de la clase a la que pertenece.
Un método de instancia no puede ser invocado independientemente de una instancia existente.
Sintaxis
func funcname(Parameters) -> returntype
{
Statement1
Statement2
……
Statement N
return parameters
}
Ejemplo
import Cocoa
class Counter {
var count = 0
func increment() {
count += 1
}
func incrementBy(amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
// 初始计数值是0
let counter = Counter()
// 计数值现在是1
counter.increment()
// 计数值现在是6
counter.incrementBy(amount: 5)
print(counter.count)
// 计数值现在是0
counter.reset()
print(counter.count)
El resultado de la ejecución del programa anterior es:
6 0
La clase Counter define tres métodos de instancia:
- incrementIncrementar el contador en 1;
- incrementBy(amount: Int)Incrementar el contador en un valor entero especificado;
- resetRestablecer el contador a 0.
CounterEsta clase también declara una propiedad mutablecount, que se utiliza para mantener el seguimiento del valor actual del contador.
Nombres de parámetros locales y nombres de parámetros externos de los métodos
Los parámetros de las funciones de Swift pueden tener a la vez un nombre local (que se usa dentro del cuerpo de la función) y un nombre externo (que se usa al llamar a la función).
Los métodos en Swift son extremadamente similares a los métodos en Objective-C. Al igual que en Objective-C, los nombres de los métodos en Swift suelen usar una preposición para referirse al primer parámetro del método, por ejemplo: with, for, by, etc.
Swift, por defecto, solo asigna al primer parámetro del método un nombre de parámetro local; por defecto, asigna a los parámetros segundo y posteriores nombres de parámetros externos.
En el siguiente ejemplo, 'no1' se declara como nombre de parámetro local en Swift. 'no2' se declara como nombre externo y se accede a él desde fuera.
import Cocoa
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)
El resultado de la ejecución del programa anterior es:
600 320 3666
Configuración de si se proporcionan nombres externos
Forzamos la adición de un nombre externo en el primer parámetro, usando ese nombre local como nombre externo (antes de Swift 2.0 se usaba el símbolo #).
Por el contrario, también podemos usar un guion bajo (_) para configurar que el segundo y los parámetros posteriores no proporcionen un nombre externo.
import Cocoa
class multiplication {
var count: Int = 0
func incrementBy(first no1: Int, no2: Int) {
count = no1 * no2
print(count)
}
}
let counter = multiplication()
counter.incrementBy(first: 800, no2: 3)
counter.incrementBy(first: 100, no2: 5)
counter.incrementBy(first: 15000, no2: 3)
El resultado de la ejecución del programa anterior es:
2400 500 45000
La propiedad self
Cada instancia de un tipo tiene una propiedad implícita llamada self; self es completamente equivalente a la propia instancia.
Puedes usar esta propiedad implícita self en un método de instancia para referenciar la instancia actual.
import Cocoa
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("Self 内: \(res)")
}
func tot(c: Int) -> Int {
return res - c
}
func result() {
print("结果为: \(tot(c: 20))")
print("结果为: \(tot(c: 50))")
}
}
let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()
El resultado de la ejecución del programa anterior es:
Self 内: 900 Self 内: 1500 结果为: 880 结果为: 850 结果为: 1480 结果为: 1450
Modificar tipos de valor en métodos de instancia
En el lenguaje Swift, las estructuras y las enumeraciones son tipos de valor. En general, las propiedades de un tipo de valor no se pueden modificar en sus métodos de instancia.
Pero, si realmente necesitas modificar las propiedades de una estructura o enumeración en un método específico, puedes optar por marcar este método como mutable (mutating); entonces el método podrá cambiar sus propiedades desde el interior, y cualquier cambio que haga se conservará en la estructura original al finalizar el método.
El método también puede asignar una instancia completamente nueva a su propiedad implícita self; esta nueva instancia reemplazará a la instancia original después de que el método termine.
import Cocoa
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)
El resultado de la ejecución del programa anterior es:
9 15 270 450 81000 135000
Asignar un valor a self en métodos mutables
Un método mutable puede asignar una instancia completamente nueva a la propiedad implícita self.
import Cocoa
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)
El resultado de la ejecución del programa anterior es:
39 65
Métodos de tipo
Los métodos de instancia son métodos que se llaman desde una instancia del tipo; también puedes definir métodos que se llamen desde el propio tipo, a estos se les llama métodos de tipo.
Para declarar métodos de tipo en estructuras y enumeraciones, se añade la palabra clave static antes de la palabra clave func del método. Las clases pueden usar la palabra clave class para permitir que las subclases sobrescriban la implementación del método de la clase padre.
Los métodos de tipo se invocan con la sintaxis de punto (.), igual que los métodos de instancia.
import Cocoa
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)
El resultado de la ejecución del programa anterior es:
35 5Otras extensiones