Clase y objetos Swift
Swift es también un lenguaje de programación orientado a objetos. Y, como otros lenguajes OOP, también admite el concepto de objetos y clases.
Un objeto es simplemente una colección de datos (variables) y métodos (funciones). De manera similar, una clase es un modelo para ese objeto.
Antes de aprender sobre los objetos, primero conozcamos las clases en Swift.
Clases rápidas
Una clase se considera como un modelo de objetos. Podemos pensar en la clase como un boceto (prototipo) de una casa. Contiene todos los detalles sobre los pisos, puertas, ventanas, etc. En base a estas descripciones construimos la casa. La casa es el objeto.
Dado que se pueden hacer muchas casas a partir de la misma descripción, podemos crear muchos objetos de una clase.
Definir clase Swift
Usamos la palabra clave class para crear una clase en Swift. Por ejemplo,
class ClassName {
// class definition
}
Aquí, hemos creado una clase llamada ClassName.
Veamos un ejemplo,
class Bike {
var name = ""
var gear = 0
}
Aquí,
Bike
– el nombre de la clasename/gear
– variables dentro de la clase con valores predeterminados""
y 0 respectivamente.
Nota: Las variables y constantes dentro de una clase se llaman propiedades.
Objetos rápidos
Un objeto se llama instancia de una clase. Por ejemplo, supongamos Bike
es una clase entonces podemos crear objetos como bike1
, bike2
etc. de la clase.
Esta es la sintaxis para crear un objeto.
var objectName = ClassName()
Veamos un ejemplo,
// create class
class Bike {
var name = ""
var gears = 0
}
// create object of class
var bike1 = Bike()
Aquí, bike1
es el objeto de la clase. Ahora, podemos usar este objeto para acceder a las propiedades de la clase.
Propiedad de clase de acceso usando objetos
usamos el .
notación para acceder a las propiedades de una clase. Por ejemplo,
// modify the name property
bike1.name = "Mountain Bike"
// access the gear property
bike1.gears
Aquí, hemos utilizado bike1.name
y bike.gears
para cambiar y acceder al valor de name
y gears
propiedad respectivamente.
Ejemplo: clase y objetos Swift
// define a class
class Bicycle {
// define two properties
var name = ""
var gears = 0
}
// create instance of Person
var bike1 = Bicycle()
// access properties and assign new values
bike1.gears = 11
bike1.name = "Mountain Bike"
print("Name: \(bike1.name), Gears: \( bike1.gears) ")
Producción
Name: Mountain Bike, Gears: 11
En el ejemplo anterior, hemos definido la clase denominada Bike
con dos propiedades: nombre y engranajes.
También hemos creado un objeto. bike1
de la clase Bike
.
Finalmente, hemos accedido y modificado las propiedades de un objeto usando .
notación.
Crear múltiples objetos de clase
También podemos crear múltiples objetos a partir de una sola clase. Por ejemplo,
// define a class
class Employee {
// define a property
var employeeID = 0
}
// create two objects of the Employee class
var employee1 = Employee()
var employee2 = Employee()
// access property using employee1
employee1.employeeID = 1001
print("Employee ID: \(employee1.employeeID)")
// access properties using employee2
employee2.employeeID = 1002
print("Employee ID: \(employee2.employeeID)")
Producción
Employee ID: 1001 Employee ID: 1002
En el ejemplo anterior, hemos creado dos objetos. employee1
y employee2
del Employee
clase
Nota: Podemos crear tantas instancias de la estructura como queramos.
Función dentro de la clase Swift
También podemos definir una función dentro de una clase Swift. Una función Swift definida dentro de una clase se denomina método.
Veamos un ejemplo,
// create a class
class Room {
var length = 0.0
var breadth = 0.0
// method to calculate area
func calculateArea() {
print("Area of Room =", length * breadth)
}
}
// create object of Room class
var studyRoom = Room()
// assign values to all the properties
studyRoom.length = 42.5
studyRoom.breadth = 30.8
// access method inside class
studyRoom.calculateArea()
Producción
Area of Room = 1309.0
En el ejemplo anterior, hemos creado una clase llamada Room
con:
- Propiedades: longitud y amplitud
- Método:
calculateArea()
Aquí, hemos creado un objeto llamado studyRoom
desde el Room
clase. Luego usamos el objeto para asignar valores a las propiedades: longitud y amplitud.
Note que también hemos usado el objeto para llamar al método dentro de la clase
room1.calculateArea()
Aquí, hemos utilizado el .
notación para llamar al método. Finalmente, se ejecuta la declaración dentro del método.
Inicializador rápido
Anteriormente asignamos un valor predeterminado a una propiedad de clase.
class Bike {
var name = ""
}
...
// create object
var bike = Bike()
Sin embargo, también podemos inicializar valores usando el inicializador. Por ejemplo,
class Bike {
var name: String
init(name: String){
self.name = name
}
}
Aquí, init()
es el inicializador que se utiliza para asignar el valor de la nombre variable. hemos usado el self.name
para referirse a la name
propiedad de la bike1
objeto.
Si usamos un inicializador para inicializar valores dentro de una clase, necesitamos pasar el valor correspondiente durante la creación del objeto de la clase.
var bike1 = Bike(name: "Mountain Bike")
Aquí,
"Mountain Bike"
se pasa a la nombre parámetro de en eso()self
representa elbike1
objetoself.name
es igual a Mountain Bike
Ejemplo: inicializador Swift
class Bike {
// properties with no default values
var name: String
var gear: Int
// assign value using initializer
init(name: String, gear: Int){
self.name = name
self.gear = gear
}
}
// object of Person with custom initializer
var bike1 = Bike(name: "BMX Bike", gear: 2)
print("Name: \(bike1.name) and Gear: \(bike1.gear)")
Producción
Name: BMX Bike and Gear: 2
En el ejemplo anterior, hemos creado la clase llamada Bike
con dos propiedades name
y gear
.
Hemos utilizado el inicializador personalizado para asignar valores a las propiedades de la clase.
Finalmente, al crear un objeto de la Bike
clase, hemos pasado valores "BMX Bike"
y 2 como argumentos.
Estructura Vs Clase en Swift
Aunque el funcionamiento de struct y class parece similar, existen algunas diferencias importantes entre ellos.
1. Clase es el concepto de programación orientada a objetos. Por lo tanto, proporciona algunas funciones de programación orientada a objetos, como la herencia, donde podemos derivar una nueva clase de la clase existente.
Sin embargo, la herencia de estructuras no está disponible.
Para obtener más información sobre la herencia, visite Swift Inheritance.
2. Las clases son de tipo referencial. Esto significa que cada instancia de una clase comparte la misma copia de datos. Por ejemplo,
class Bike {
var color: String
init(color:String) {
self.color = color
}
}
var bike1 = Bike(color: "Blue")
var bike2 = bike1
bike1.color = "Red"
print(bike2.color) // prints Red
Como puede ver aquí, estamos cambiando el color para el bike1
objeto. Sin embargo, el color se cambia para el bike2
objeto también.
Por otro lado, las estructuras son del tipo de valor. Esto significa que cada instancia de una estructura tendrá una copia independiente de los datos. Por ejemplo,
struct Bike {
var color: String
init(color:String) {
self.color = color
}
}
var bike1 = Bike(color: "Blue")
var bike2 = bike1
bike1.color = "Red"
print(bike2.color) // prints blue
Como puede ver aquí, estamos cambiando el color para el bike1
objeto. Sin embargo, el color de la bike2
el objeto no cambia.