Opcionais
Permitem que representemos um dado que não existe, mas que pode ou não vir a existir na memória.
Unwrapping
Quando um dado é opcional regular o swift não nos permite acessá-lo sem antes verificar se ele é nil(não existe na memória) ou existe mesmo, essa verificação se chama unwrap.
As duas formas mais comuns de fazer unwrap são com if let
e guard let
.
if let
Faz o unwrap com uma condição, se tiver algum valor dentro do opcional você consegue usá-lo, caso contrário a condição falha e você pode fazer alguma outra ação que não use o opcional.
A partir do Swift 5.7 não é mais necessário o uso de binding(passar o valor do opcional pra uma constante) no if let
guard let
Faz o unwrap passando o dado existente pra uma constante(binding), caso ache nil fecha a função, loop ou condição onde foi usado.
A maior diferença entre
if let
eguard let
é que no guard o dado que foi checado e agora é não opcional continua usável depois do guard.
Force unwrapping
Quando você tem um valor opcional mas tem certeza absoluta de que ele não é nil é possível forçar o swift a transformar ele em um tipo não opcional usando !
.
O uso de force unwrapping é bastante contraindicado na maioria dos casos porque você pode esquecer alguma validação e o dado chegar nil no ponto do código que força essa conversão pra não opcional, caso isso aconteça o código crasha e esse é o pior cenário possível pra um app.
Implicitly Unwrapped Optionals
Assim como os opcionais regulares, podem conter um dado ou serem nil, mas diferente dos regulares você não precisa fazer unwrap pra utilizá-los.
Implicitly unwrapped optionals são criados adicionando uma exclamação depois do nome: let idade: Int! = nil
Por se comportarem como opcionais em que já foi feito o unwrap, não é necessário fazer if let
ou guard let
pra usá-los, mas se tentarmos usá-los e eles forem nil o código da crash.
Usamos esse tipo de opcional quando uma variável começa como nil, mas sabemos que sempre vai ter um valor dentro dela antes de precisarmos usá-la, o uso desse tipo evita que precisemos fazer if let
toda hora, mas num geral é melhor evitar e usar opcionais regulares.
No UIKit são comumente usadas pra layout, já no SwiftUI quase não são utilizadas.
Nil coalescing | Valor padrão
O operador nil coalescing faz o unwrap do opcional e retorna o valor dentro dele, mas caso esse valor seja nil ele retorna o valor que foi colocado como padrão: ?? valorPadrao
.
Optional chaining
É um processo para consultar e chamar propriedades e métodos opcionais. Se o opcional contiver um valor, a chamada de propriedade/método da certo e retorna sempre um opcional, se for nil retorna nil. Várias consultas podem ser encadeadas e toda a cadeia falha se algum deles for nil.
Failable initializer
É possível criar um init para struct ou classe que pode falhar. Caso um objeto não possa ser instanciado com os dados que foram passados, ao invés de retornar sempre uma nova instância, retorna nil. Caso os dados sejam válidos retorna uma instância opcional.
Typecasting
Nos permite verificar o tipo de uma instância e mostrar ao Swift como tratá-la dentro da sua própria hierarquia, é muito útil ao trabalhar com protocolos e herança de classe.
Top comments (0)