Há menos e menos tempo até o lançamento do curso
"iOS Developer" , então hoje continuamos a publicar material da série "10 perguntas sobre Swift". A primeira parte pode ser
lida aqui .

Explique os genéricos no Swift?
Os genéricos (modelos genéricos) permitem escrever funções e tipos flexíveis e reutilizáveis que podem funcionar com qualquer tipo. Você pode escrever um código que evite duplicação e expresse sua finalidade de maneira clara e abstrata.
Os tipos de matriz e dicionário no Swift são coleções universais (genéricos).
No código abaixo, uma função universal para trocar dois valores é usada para uma sequência e um número inteiro. Este é um exemplo de código reutilizável.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } var num1 = 4 var num2 = 5 var str1 = “a” var str2 = “b” swapTwoValues(&num1,&num2) swapTwoValues(&str1,&str2) print (“num1:”, num1)
O que são tipos opcionais no swift e quando devem ser usados?
Opcional (Opcional, “opcional”) em Swift é o tipo em que o valor pode ou não ser. As opções são indicadas adicionando "?" para qualquer tipo.
Opções para usar o opcional:- Trechos de código que podem falhar (eu esperava algo, mas não recebi nada).
- Objetos que estão vazios no momento, mas podem se tornar algo mais tarde (e vice-versa).
Um bom exemplo de um opcional:Uma propriedade que pode ou não estar presente , como um nome do meio ou marido / esposa na classe Pessoa.Um método que pode retornar um valor ou nada , por exemplo, correspondente em uma matriz.Um método que pode retornar um resultado ou obter um erro e não retornar nada , por exemplo, tenta ler o conteúdo do arquivo (como resultado do qual os dados do arquivo geralmente serão retornados), mas o arquivo não existe.Delegar propriedades que nem sempre precisam ser definidas e geralmente definidas após a inicialização.
Como elos fracos nas aulas . O que eles apontam pode ser definido a zero a qualquer momento.
Se você precisar descobrir como o valor está definido (dados ainda não carregados> dados) em vez de usar uma variável booleana separada dataLoaded.
O que é encadeamento opcional no Swift?
Os processos de solicitação, chamada de propriedades, subscritos e métodos para um opcional, que pode ter o valor "nil", são definidos como uma sequência opcional (cadeia opcional) .A sequência opcional retorna dois valores -
- se a opção contiver um "valor", quando as propriedades, métodos e subscritos associados forem chamados, o valor será retornado
- se um opcional contiver "nulo", todas as propriedades, métodos e subscritos associados a ele retornarão nulo
Uma sequência opcional é uma alternativa à descompactação forçada.
O que é desembrulhar forçado?
A descompactação forçada é uma maneira de
recuperar o valor contido em um opcional. Esta operação é perigosa porque você está basicamente dizendo ao compilador: Tenho certeza de que esta opção contém um valor real, extraia-o!
let value: Int? = 1 let newValue: Int = value!
O que é desembrulhar implícito?
Descompactação implícita : quando definimos uma opção descompactada implicitamente, definimos um contêiner que forçará automaticamente a descompactação toda vez que o lermos.
var name: String! = “Virat” let student = name
Se o opcional implicitamente descompactado for nulo e você estiver tentando acessar seu valor compactado, você lançará um erro de tempo de execução. O resultado é exatamente o mesmo que se você colocasse um ponto de exclamação após o opcional habitual, que não contém um valor.O que é ligação opcional?
Você pode descompactar as opções de maneira "segura" ou "insegura". Uma maneira segura é usar ligantes opcionais.
A ligação opcional é usada para determinar se um opcional contém um valor e, nesse caso, disponibilizaremos esse valor como constante ou variável de tempo. Portanto, não há necessidade de usar um sufixo! para acessar seu valor.
let possibleString: String? = "Hello" if let actualString = possibleString {
O que é um Guard
e quais são seus benefícios?
A declaração de
guard
é simples e poderosa. Ele verifica alguma condição e, se for avaliada como falsa, a instrução else é executada, o que geralmente encerra o método.
func addStudent(student: [String: String]) { guard let name = student["name"] else { return } print("Added \(name)!") guard let rollNo = student ["rollNo"] else { print("roll No not assigned") return } print("Assigned roll no is \(rollNo).") } addStudent(student: ["name": "Ravi"])
A vantagem do
guard
é
uma execução mais rápida .
Guard
bloco
Guard
é executado apenas se a condição for falsa e o bloco for encerrado através de uma declaração de transferência de controle, como
return
,
break
,
continue
ou
thrown
. Isso fornece uma saída antecipada e menos colchetes. Saída antecipada significa execução mais rápida.
Consulte
este artigo para obter mais informações.
Quando o guard let
deve ser usado e quando o guard let
?- Use
guard
quando desejar eliminar informações inesperadas / incorretas e concentre-se na meta se tiver maneiras alternativas de lidar com as informações. - Use a
guard
if
else
bloqueie para reduzir o aninhamento e o recuo, pois é relativamente compacto.
O que é defer
?
A
defer
usada para executar um conjunto de instruções imediatamente antes da execução do código deixar o bloco atual.
A
defer
dentro do bloco
if
será executada primeiro. Isso é seguido pelo padrão LIFO para executar as demais declarações de
defer
.
func doSomething() { defer { print(“1”)} defer { print(“2”)} defer { print(“3”)} if 1<2 { defer { print("1<2")} } defer { print(“4”)} defer { print(“5”)} defer { print(“6”)} } 1<2 6 5 4 3 2 1
Listar quais operadores de transferência de controle são usados no Swift?
break
- A instrução
break
termina a execução de toda a instrução do fluxo de controle imediatamente.
continue
- a instrução
continue
diz ao loop para parar o que está fazendo e iniciar novamente no início da próxima iteração do loop.
return
- retorna valores das funções.
throw
- precisa encaminhar erros usando as funções de
throw
fallthrough
- a instrução
fallthrough
usada no bloco case case para executar a instrução case, que fica ao lado das instruções case correspondentes, com base nos requisitos do usuário.
fallthrough
swift
o operador de
fallthrough
usado para executar o próximo caso, mesmo que não corresponda ao original.
let integerToDescribe = 5 var description = “The number \(integerToDescribe) is” switch integerToDescribe { case 2, 3, 5, 7, 11, 13, 17, 19: description += “ a prime number, and also” fallthrough case 10: description += “ case 10.” default: description += “ an integer.” } print(description)
O fim da segunda parte. A primeira parte pode ser
lida aqui .
Aguardamos seus comentários e lembre-se de que em poucas horas haverá um
dia aberto , no âmbito do qual falaremos detalhadamente sobre nosso curso.