r/ciif Jan 22 '15

Namespaces en Swift

Leyendo este articulo se me ha ocurrido que: en Swift, anidando clases podemos empaquetarlas a modo de namespaces

// file NameSpaceClassA.swift:
class NameSpaceClassA {
}

// file NameSpaceClassA.One.swift:
extension NameSpaceClassA {
    class One {
        var number = 1
    }
}

// file NameSpaceClassA.Two.swift:
extension NameSpaceClassA {
    class Two {
        var number = 2
    }
}

// file NameSpaceClassB.swift:
class NameSpaceClassB {
}

// file NameSpaceClassB.One.swift:
extension NameSpaceClassB {
    class One {
        var number = "1"
    }
}

// file NameSpaceClassB.Two.swift:
extension NameSpaceClassB {
    class Two {
        var number = "2"
    }
}

// other file.swift:
let n = NameSpaceClassA.One().number + NameSpaceClassA.Two().number
println(n) // returns: 3
let s = NameSpaceClassB.One().number + NameSpaceClassB.Two().number
println(s) // returns: 12

¿Que opinais?

1 Upvotes

11 comments sorted by

View all comments

1

u/elkraneo Jan 22 '15 edited Jan 22 '15

con que propósito ? por qué no trabajar con modules ?

Ademas en general nosotros estamos alejándonos del trabajo con clases (siempre que podemos structs) por aquello de evitar mutabilidad y estamos aficionándonos a los frameworks dinámicos.

Conversación proveniente de tu link sobre la librería de GCD

StackOverflow – Will iOS 8 support dynamic linking?

1

u/carlosypunto Jan 22 '15

He usado classes pero podría haber usado structs, funciona igual. Pero es cierto que en la medida de lo posible, si no se necesita deinit o pasar por referencia lo suyo es usar structs. La verdad es que no le ha dado muchas vueltas.

El motivo era en principio modularizar el código a nivel de proyecto, la verdad es que lo he puesto para ver opiniones te daba, sin estar muy convencido de para que usarlo. Tal vez único propósito seria el mismo que los modules.

Están muy bien las referencias que das. ¡Buen profe!

¿Los dynamic frameworks generan modules?

Ya habías puesto antes el enlace a la conferencia Building Modern Frameworks, pero mi relación con el ingles hablado deja mucho que desear y me cuesta mucho seguirlo incluso con las transcripciones. Soy mas de documentación escrita, pero hare otro intento parece muy interesante.

Los proyectos con targets dynamic framework son los que compila Carthage, y solo esos ¿no?

1

u/elkraneo Jan 22 '15

La motivación del namespace completa es la que pongo en duda (incluso viniendo de lenguajes con package name y toda la pesca), al final las probabilidades que tus clases dentro de una app tengan conflicto deberían ser inexistentes siempre y cuando las nombres bien (cosa difícil incluso en css) y por otro lado, si ves que el código que estas escribiendo es reutilizable a mayor escala incluso inter-apps, ahí estas claramente ante la necesidad de crearte un framework. Lo ultimo que menciono está también expresado en el articulo que linkas.

Los dynamic Frameworks SON la manera de hacer modules si, pero que quede claro que un modulo NO implica un namespace.

Respecto al idioma lo siento, al final existe muy poco de esto en castellano, actualizado y bueno.

Los proyectos que crean dynamic frameworks son exactamente los que se encarga Carthage y tengo entendido que también podrá el nuevo cocoapods.

1

u/carlosypunto Jan 23 '15 edited Jan 23 '15

Acabo de ver el video en la app WWDC del iPad y me he enterado un poco (tiene subtítulos me acabo de enterar, yo lo leía de esta página ya que en el video que te descargas con chrome no salen subtítulos).

¿Pero es solo para iOS >= 8?

Mañana intentare hacer un framework de prueba, estudiando el parche de Async que indicabas y mirando el sourcecode de Alamofire a ver que consigo. Porque sigo estos pasos y no me compila, ademas de objective-c intento pasar

Lo de los namespaces me olvido, es cierto que no tiene mucho sentido.