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 clase
  • name/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, bike2etc. 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 el bike1 objeto
  • self.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.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *