Subsorting vs protocolos

Vamos a comenzar con el enfoque de Class :

 class LoginCnetworkingentials { var id : String init(userID:String) { self.id = userID } } 

el tendremos lo siguiente:

 class FacebookLoginCnetworkingentials : LoginCnetworkingentials { var token : String init(userID:String,userToken:String) { self.token = userToken super.init(userID: userID) }} 

Y

 class TwitterLoginCnetworkingentials : LoginCnetworkingentials { var token : String var secret : String init(userID:String,userToken:String,secret : String) { self.token = userToken self.secret = secret super.init(userID: userID) } } 

El segundo enfoque es el Protocol Oriented si no estoy equivocado

 protocol LoginCnetworkingentials { var id : String { get } } 

entonces tendremos:

 struct FacebookLoginCnetworkingentials : LoginCnetworkingentials { var id: String var token : String init(userID:String,userToken:String) { self.id = userID self.token = userToken } } 

Y

 struct TwitterLoginProfile : LoginCnetworkingentials { var id: String var token : String var secret : String init(userID:String,userToken:String,secret : String) { self.token = userToken self.secret = secret self.id = userID } } 

Solo necesito saber cuál es más Swift.

En última instancia, ninguno de estos enfoques es "más rápido". En Swift, a veces querrás usar la inheritance y otras veces querrás usar protocolos. El punto de decisión real para estos dos enfoques es:

¿Desea semántica de tipo de valor (estructuras y protocolos) o desea semántica de tipo de reference (classs y protocolos). Normalmente prefiero valorar la semántica de tipo porque son más seguros, pero definitivamente hay circunstancias en las que la semántica del tipo de reference es importante. Puede leer más sobre eso aquí: ¿Por qué elegir Struct over Class ?

Cualquiera o es aceptable en swift.

Aquí es cómo desea distinguir entre los dos.

Al trabajar con protocolos, desea tratarlos como si fueran impresiones azules para sus objects.

Ballplayers must know what a ball is, so any person that wants to be a Ballplayer must know what a ball is.

Tienes un set de reglas que deseas que sigan ciertos objects, crea un protocolo.

Si desea hacer objects que tengan funcionalidad, y desea que los niños inherentes esta funcionalidad, y luego tener más funcionalidad, entonces haga la estructura de class inheret.

Dad can throw a ball at 100MPH Junior can throw a ball at 100MPH and throw a curve ball.

Esto se haría con una class, no un protocolo

Las instancias de estructura siempre pasan por valor, y las instancias de class siempre se pasan por reference. Esto significa que son adecuados para diferentes types de tareas. A medida que considere las construcciones de datos y la funcionalidad que necesita para un proyecto, decida si cada construcción de datos debe definirse como una class o como una estructura.

Como pauta general, considere crear una estructura cuando se apliquen una o más de estas condiciones:

El propósito principal de la estructura es encapsular algunos valores de datos relativamente simples. Es razonable esperar que los valores encapsulados se copien en lugar de referencer cuando asigna o pasa una instancia de esa estructura. Todas las properties almacenadas por la estructura son en sí mismas types de valor, que también se espera copyr en lugar de referencerlas. La estructura no necesita henetworkingar properties o comportamiento de otro tipo existente. Ejemplos de buenos candidatos para estructuras incluyen:

  • El tamaño de una forma geométrica, tal vez encapsulando una propiedad de ancho y una propiedad de altura, ambas de tipo Doble.
  • Una forma de referirse a ranges dentro de una serie, tal vez encapsulando una propiedad de inicio y una propiedad de longitud, ambos de tipo Int.
  • Un punto en un sistema de coorderadas 3D, tal vez encapsulando las properties x, y y z, cada una de tipo Doble.

En todos los demás casos, defina una class y cree instancias de esa class para ser administradas y pasadas por reference. En la práctica, esto significa que la mayoría de las construcciones de datos personalizados deben ser classs, no estructuras.

¿Por qué elegir Struct Over Class?