Tipo de segurança em rápida

implementos Swift segurança de tipo

, que basicamente significa que você não pode usar uma variável de forma inadequada para os termos de seu tipo. Em outras palavras, de acordo com as regras de segurança de tipos, você pode dividir por zero - isso não é um erro de tipo - mas você não pode executar uma operação aritmética com uma corda a menos que você fazer algumas conversões em primeiro lugar.

Tipo de segurança pode ser descrito em uma especificação de linguagem e é aplicada em um ambiente de desenvolvimento como Xcode- ele também pode ser executada com uma programação cuidadosa. Isso é parte do problema: Sem aplicadas segurança de tipo, é muito fácil de deslizar para cima e criar um código inseguro.

Em muitos ambientes, código inseguro pode falhar a primeira vez que você executá-lo - este é o melhor cenário. Infelizmente, o cenário mais comum é que o código falha em vários momentos. Muitas vezes, o seu fracasso tem a ver com a memória a sua aplicação tem que trabalhar com, então o código inseguro pode falhar, dependendo do que outros aplicativos ou funções estão em execução no momento.

Deixando o ambiente de desenvolvimento reforçar a segurança de tipos é a forma mais segura de lidar com estes problemas. (Contando com as boas intenções das pessoas é, infelizmente, nem sempre a escolha mais sábia.)

A especificação de linguagem Swift descreve sua segurança tipo como parte da language- a especificação da linguagem inteira é forçado pelo compilador, bem como pelo ambiente de desenvolvimento Xcode. No uso comum, no entanto, muitas vezes as pessoas dizem coisas como “Swift reforça segurança de tipo.”

Na verdade, Swift só fornece o specification- é Xcode eo compilador LLVM que fazer a aplicação. No entanto, a menos que haja uma razão para fazer uma distinção entre a especificação Swift e sua implementação no Xcode e compilador, este livro refere-se de uma forma geral para Swift.

Swift leva duas abordagens para reforçar a segurança de tipos: reforço padrões de codificação e inferir tipos. Ele usa outras abordagens bem, mas estas são as mais importantes.

Aperto padrões de codificação

Há muito tempo existe um trade-off (algumas pessoas diria que é um batalha) Entre as práticas de codificação de tipagem rígida e solta de variáveis. digitação estrita é mais problema, e pode causar erros de compilação como os objetos do compilador para variáveis ​​vagamente-digitados. digitação solto é mais simples de escrever e incorre menos erros do compilador, mas pode causar mais erros de execução e falhas.

Swift aperta padrões de codificação. Em grande medida, estas normas consistem em restrições de linguagem que impedem código inseguro. Aqui estão algumas das medidas de segurança do tipo que Swift coloca no lugar e reforça:



  • ponteiros: Ponteiros permitem acessar a memória diretamente, o que pode levar a todos os tipos de problemas. A sintaxe básica Objectivo-C para aceder a uma instância de uma classe envolve um ponteiro: Este não é o caso com Swift.

    Quando você declarar uma instância de uma classe, como UIView em Objective-C, você fazê-lo com o código, como UIView * myView. Isso asterisco indica que você está trabalhando com um ponteiro (é claro sintaxe C de idade). Se você está acostumado a Objective-C, a maioria desses asteriscos são história para você. A exceção é se você está misturando Objective-C e Swift.

  • inicialização: Variáveis ​​deve ser inicializado em Swift antes do uso. Não há nenhuma maneira de usar variáveis ​​não inicializadas no Swift.

  • Sem nil: Em outras línguas, nada é frequentemente utilizada para fornecer um valor que pode ser testado para ver se existe um objecto. Em Swift isso é feito com tipos opcionais.

  • gerenciamento de memória e verificação de estouro: Swift herdou características Objective-C do implementados com comportamentos compilador avançadas, tais como a contagem de referência automático (ARC).

inferindo tipos

Porque Swift requer variáveis ​​(e constantes) para ser inicializado antes de ser utilizada, a biblioteca compilador e runtime sempre têm um valor para cada variável. Deste valor, Swift pode inferir um tipo sem ter que especificá-lo. Em outras palavras, você pode especificar o tipo para qualquer variável, mas você não tem que fazer isso, se essa variável é inicializada com um valor a partir do qual Swift pode inferir o tipo.

Arrays e dicionários em Swift deve conter instâncias do mesmo tipo. Assim, quando você criar uma matriz ou dicionário, você deve especificar explicitamente seu tipo ou fornecer valores iniciais para que Swift pode inferir o tipo da matriz ou dicionário. Em ambos os casos, Swift pode determinar o tipo dos valores na matriz ou dicionário.

Quando você está lidando com classes e subclasses, você pode querer usar um tipo explícito. Se sua matriz ou dicionário está indo eventualmente conter instâncias de subclasses de uma determinada classe, você pode inicializá-lo com várias dessas subclasses.

Por exemplo, uma matriz que contém vários exemplos de UIView subclasses podem ser inicializados com um ou mais UILabel instâncias. No entanto, não há nenhuma maneira Swift poderia inferir UIView de instâncias que não incluem todos os possíveis UIView subclasses. Então, se você está ciente de que você vai querer adicionar (digamos) UIButton casos mais tarde, você pode preferir escrever explicitamente a matriz como UIView assim toda a UIView instâncias de subclasses são bem-vindos.


Publicações relacionadas