Swift – Tuplas e Optionals
1 de novembro de 2016 | by administrador
// 1 - Tuplas (Tuples)
/*
Tuplas - Uma das novidades da linguagem Swift
Elas agrupam valores em um único elemento
Os valores podem ser de qualquer tipo de dados
*/
let codErro = 404
let descErro = "Not Found"
// Com a tupla, conseguimos definir tipos diferentes em um mesmo elemento
let http404Error = (404, "Not Found")
// http404Error é do tipo (Int, String)
// Como exibir as informações?
// 1 - Por decomposição
let (statusCode, statusMessage) = http404Error
print("O código de erro é \(statusCode)")
print("A mensagem de erro é \(statusMessage)")
// 2 - Por índice
print("O código de erro é \(http404Error.0)")
print("A mensagem de erro é \(http404Error.1)")
// Podem ser atribuídos nomes aos campos
let httpStatus = (statusCode: 200, descricao: "OK")
// Exibindo as informações pelo nome
print("O código de retorno é \(httpStatus.statusCode)")
print("A mensagem de retorno é \(httpStatus.statusCode)")
/*
Optionals
Outro novo recurso da linguagem Swift, visando tornar os apps mais seguros e
menos sujeitos a falhas
Os Optionals são utilizados em situações onde pode haver valores inesperados ou
ausência de valor
Em um Optional, dizemos que:
1) Há um valor, e ele é ugial a (x), OU
2) Não há um valor, absolutamente (valueless)
*/
// Inicialmente, veremos um código sem proteção, onde a finalidade é converter uma
//string em um inteiro, e posterormente efetuar um cálculo com esse valor
let possivelNumero: String = "abc"
//var numeroConvertido = Int(possivelNumero)
// numeroConvertido foi inferido para Int
//numeroConvertido! += 10
// Forced Wrapping - "garanto" que não haverá ausência de valor - assumo a responsabilidade
// Verificação reativa
//if numeroConvertido != nil {
// numeroConvertido! += 10
// print(numeroConvertido)
//} else {
// print("Não foi possível converter o valor")
//}
// Para tratar com Optionals, a melhor forma é ser pro-ativo
// Solução mais sustentável
// Através do recurso que se chama Optional Binding
if let numeroReal = Int(possivelNumero) {
print("O valor da variável convertida é \(numeroReal)")
print(numeroReal)
} else {
print("Não foi possível converter o valor")
}
// Como indicar que um elemento pode ser um Optional
// Atrvés do uso do ponto de interrogação (?)
let nomeUsuario: String?
nomeUsuario = "Jones"
//let cumprimento = "Olá " + nomeUsuario + ". Seja bem-vindo"
//print(cumprimento)
// DESAFIO
// Como resolver a situação acima de forma segura?
// Verificar se nomeUsuario tem um valor válido antes de trabalhar com ele
// Na Swift, através do Optional Binding
if let nomeValido = nomeUsuario {
let cumprimento = "Olá " + nomeValido + ". Seja bem-vindo"
print(cumprimento)
} else {
print("Nome de Usuário tem um valor inválido ou ausência de valor")
}
// Mais um exemplo de Optional, efetuando uma dupla verificação
var nome: String?
var sobreNome: String?
nome = "Jones "
sobreNome = "Carvalho"
// Iremos utilizar o Optional Binding para garantir que os campos tenha valor válido
if let primeiroNome = nome, let segundoNome = sobreNome {
let nomeCompleto = primeiroNome + segundoNome
} else {
print("Há algum problema com os nomes. Favor verificar")
}