Tiago Aguiar

Tutorial: Como Usar Namespace Em Swift iOS

avatar
Preview Image

Existe algumas definições sobre o que é o conceito de namespace quando falamos em computação, mas a que acredito ser a definição mais clara é:

O Que é Namespace?

Namespaces são usados para organizar o código em grupos lógicos e para evitar conflitos de nomes que podem ocorrer especialmente quando sua base de código inclui várias bibliotecas.

Isso quer dizer que caso seu projeto tenha duas bibliotecas como Maps e Views e essas duas bibliotecas possuem uma classe com o mesmo nome - por exemplo Resizer - para o sistema identifique qual classe você se refere, usamos o conceito de namespace.

Assim como entender a diferença entre classes vs structs esse conceito de namespace vai te ajudar a dominar ainda mais a linguagem de programação Swift.

Em outras linguagens de programação como o C++ por exemplo podemos declarar namespaces dessa forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace ContosoData  
{      
	class ObjectManager   
	{  
		public:  
			void DoSomething() {}  
		};  
		void Func(ObjectManager) {}  
	}  
}


ContosoData::ObjectManager mgr;  
mgr.DoSomething();  
ContosoData::Func(mgr);

Entretanto, na linguagem Swift não temos esse conceito - que na minha opinião pode ser muito útil em alguns casos. Mas, é possível criar algo semelhante a namespace mesmo usando a linguagem Swift. Logo, neste tutorial você aprenderá porquê e como aplicar este método em Swift.

Como e Por que Usar Namespace Para Criar Aplicativos iOS?

Imagine o seguinte cenário. Sua tarefa é criar uma biblioteca padrão de todos os aplicativos desenvolvidos pela sua empresa para que ela mantenha sempre uma identidade visual, dessa forma, a empresa cria um branding para ser lembrado pelos seus clientes.

Como desenvolvedor, você não irá definir cores e padrões em cada aplicativo iOS sendo que você poderia fazer isso uma única vez. Ou seja, você deve definir cores, padrões de botões, campos de textos, rótulos (labels) e etc.

Para organizar o seu projeto de uma forma simples e com uma boa qualidade de código você pode desfrutrar dos recursos de namespace usando Enums na linguagem de programação Swift.

Primeiro, você precisar entender que não existe de fato um namespace em Swift, mas ele pode ser utilizado como um Hack de programação usando Enums.

Dá uma olhada nesse exemplo:

1
2
3
4
5
6
7
extension UIColor {

	enum mykit {
		static let primary = UIColor.green
	}

}

Nesse bloco de código, criamos uma cor primária primary no padrão singleton dentro de um Enum.

Desta forma, sempre que precisar de uma cor primária do meu projeto, basta usar esse bloco de código da seguinte forma: x = UIColor.mykit.primary.

Se por alguma razão ou outra a empresa decidir trocar suas cores que a identificam basta alterar os valores do nosso enum mykit para o enum do cliente por exemplo.

Neste exemplo, não aconteceu de usar uma mesma classe que tenha dentro do SDK da Apple ou de outra biblioteca externa, mas é possível para evitar ambiguidade no projeto.

Na época do Objective-C, esse eventual “problema” era resolvido usando prefixos em nomes de classes. É por isso que em muitos arquivos legados iOS você encontra MKMapView, UIView ou NSObject para evitar ter 2 MapView no projeto.

Claro que em alguns casos, esses prefixos se referem a bibliotecas e .frameworks que são importados pelo seu projeto.

Em resumo, você consegue usar classes e variáveis que precise de um mesmo nome (em container diferentes) e também organizar o seu projeto no formato de hierarquia com Enums para distinguir a qual “módulo” aquela variável pertence como: UIColor.mykit.primary e UIColor.retro.primary.

Vai lá, adicione isso no seu aplicativo ou no app da sua empresa e mostre o que você aprendeu.

Mas antes, eu gostaria fortemente que você ajudasse esse blog a crescer para que outros desenvolvedores iOS possam aprender também. É bem simples.

  • Compartilhe nas redes sociais com seus amigos.

Maravilha! Em breve você receberá conteúdos exclusivos por e-mail. Continue lendo os artigos para aprender mais sobre programação.