namespaces - python3 - python crear paquetes
Colisión de nombre y biblioteca estándar de Swift (1)
Sé que Swift no usa espacios de nombres, pero que los nombres se definen dentro de cada módulo. Antes que nada, no entiendo muy bien cómo esto evita las colisiones de nombres. Siéntete libre de elaborar.
Sin embargo, mi pregunta principal es: supongamos que quiero una estructura de árbol sin usar NSTreeNode, así que hago mi propia clase llamada "TreeNode". Ahora digamos que Apple decide incluir una clase para construir árboles en la biblioteca estándar de Swift y, como era de esperar, lo llaman "TreeNode". ¿Qué pasa entonces? Mi TreeNode personalizado colisionará con TreeNode de la Biblioteca Estándar ... ¿Tendré que cambiar todo mi código en casos como ese? ¿O tal vez Apple promete que la biblioteca estándar de Swift no cambiará en el futuro?
EDIT: pregunta respondida aquí (gracias @Martin R por tu comentario)
El espaciado de nombres en Swift es implícito. Todas las clases y otros símbolos pertenecen al objetivo (módulo) en el que están definidos. Por lo tanto, si define una clase String
el nombre completo será MyTarget.String
. Cuando hay una colisión de nombre, debe anteponer el nombre de la clase al módulo (marco) en el que está definido, excepto cuando hay una clase con ese nombre definido en el módulo actual: esta clase tiene prioridad y no necesita ser prefijado
struct String {
var swiftString = ""
}
var a = String()
var b = Swift.String()
Entonces, si usted crea su clase TreeNode
y luego Apple agrega TreeNode
, su nombre tendrá prioridad si está usando solo un módulo y no necesita cambiar nada. Si desea usar el TreeNode
de Swift, debería referirse a él como Swift.TreeNode
.