Estructuras vs Clases

2/27
Recursos
Transcripción

Aportes 8

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Ambas permiten almacenar datos y definir métodos, inicializadores (constructores) y pueden ser extendidas.

Clases:

  • Herencia
  • Casting
  • Desinicializador para liberar memoria
  • Reference counting: sistema que permite localizar cuántos fragmentos de código están usando una determinada variable, esta implementado para referenciar mas de una referencia por clase en tiempo de ejecución.

Sintaxis de una Estructura y una Clase


struct SomeStruct {
    // La definición de la estructura
}

class SomeClass {
    // La definición de la clase
}

Ejemplos


struct Resolution {
    var width = 0
    var height = 0
}

class VideoMode {
    var resolution = Resolution()
    var interlace = false
    var frameRate = 0.0
    var name: String?
}

let someResolution = Resolution()
let someVideoMode = VideoMode()

print(someResolution.width)
someVideoMode.resolution.width = 1280
print(someVideoMode.resolution.width)

//someResolution.width = 1280	// esto no se puede hacer porque fue declarada como constante.

someVideoMode.frameRate = 30.0
print(someVideoMode.frameRate)

Una estructura, una vez creada, ocupa un espacio de memoria y al declararla como constante, tiene que permanecer inmutable. Es por eso que esto no se puede realizar:

someResolution.width = 1280

En el caso de un objeto de una clase, lo que tengo no es el propio objeto sino la zona de la memoria que ocupa. Las variables que tenga en su interior, las computed properties o las stored properties, podrán ir cambiando si se han declarado como variables (var dentro de la clase.

mis apuntentes !!! y dure como una hora viendo esta clase para poder entender😅

Las estructuras y clases de Swift tienen muchas cosas en común. Ambos pueden:

  • Definir propiedades para almacenar valores

  • Definir métodos para proporcionar funcionalidad.

  • Definir subíndices para proporcionar acceso a sus valores utilizando la sintaxis de subíndices

  • Definir inicializadores para configurar su estado inicial

  • Extenderse para expandir su funcionalidad más allá de una implementación predeterminada

  • Cumplir con los protocolos para proporcionar una funcionalidad estándar de cierto tipo

Las clases tienen capacidades adicionales que las estructuras no tienen:

  • La herencia permite que una clase herede las características de otra.

  • La conversión de tipos le permite verificar e interpretar el tipo de una instancia de clase en tiempo de ejecución.

  • Los desinicializadores permiten que una instancia de una clase libere cualquier recurso que haya asignado.

  • El recuento de referencias permite más de una referencia a una instancia de clase.

Me gusta mucho como explica estas cosas complejas, Profe :3

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

Me gusta mucho el resumen de CS193p - Developing Apps for iOS. Es mas un resumen para tener claros los puntos que se explican con código. Lo escribí como TRIP2FUM para recordarlo
Type: Value vs Reference
Reference: Copy vs ARC
Inheritance: No vs Single
Passed: Copied vs pointers
Paradigm: FP vs OOP
Free Init: all vars vs no vars
Mutability: explicitly vs Always
Usage: go to (code) vs MVVM ViewModel and UIKit

Por fin llegue a este punto! Como va la comunidad de Swift en Platzi??

pero si declaramos la estructura como variable ¿se podría modificar? ¿o una estructura es inmutable?