Estructuras vs Clases

2/27
Recursos
Transcripción

Aportes 10

Preguntas 0

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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 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

Para el que viene de otros lenguajes mobile como kotlin, las struct son las primas de las Data class de Kotlin.

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

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?
}

es como en typescript, para definiciones mas peque√Īas usamos el type y para mas complejas o extensas simplemente creamos las clases

pero si declaramos la estructura como variable ¬Ņse podr√≠a modificar? ¬Ņo una estructura es inmutable?