Classes, estruturas e enumerações em Swift
Colocar as classes, estruturas e enumerações em conjunto reflete suas características comuns em Swift, mas há uma distinção muito importante: enumerações e estruturas são tipos de valor. Instâncias de enumerações e estruturas são copiados quando eles são passados para uma função ou atribuído a uma variável ou constante. Isso significa que você pode ter várias cópias de uma instância de estrutura ou enumeração, cada um com os seus próprios valores que são independentes dos outros.
Por outro lado, as classes são tipos de referência. Quando eles são atribuídos a uma variável ou constante ou quando eles são passados para uma função, um referência para a instância é o que se passou. Porque não há uma única instância subjacente às referências passadas para funções ou atribuídos a variáveis ou constantes, uma alteração aos valores dessa instância subjacente é refletida em todas as cópias.
Dê uma olhada na tabela, que mostra os recursos disponíveis nas classes, estruturas e enumerações. A maioria desses recursos são comuns a maioria das linguagens de programação orientada a objeto, de uma forma ou de outra. Alguns deles são ligeiramente redefinidos para Swift. Eles são mostrados no lado esquerdo da tabela, e são brevemente descritos aqui.
Característica | Classes | estruturas | enumerações |
---|---|---|---|
instâncias | x | x | x |
propriedades | x | x | Somente as propriedades computadas |
Métodos | x | x | x |
subscritos | x | x | x |
initializers | x | x | x |
extensões | x | x | x |
protocolos | x | x | x |
Herança | x | ||
fundição tipo | x | ||
Deinitializers | x | ||
ARCO | x |
instâncias: Um objeto que é uma representação real de uma classe na maioria das linguagens orientadas a objeto é chamado de instância. Em algumas linguagens orientadas a objetos, você também pode usar uma classe em si como um objeto (por exemplo, isso é verdade para Objective-C). Para muitas línguas, as variáveis declaradas como struct ou enum, são referidos pela struct ou enum nome.
Em Swift, é um instância de um struct ou enum, mas as pessoas ainda usam frequentemente o nome do tipo (como em # 147-myVar é uma MyStruct# 148-) e não como uma instância de um struct particular (# 147-myVar é uma instância de MyStruct# 148-). Não perca o sono por causa disso.
propriedades: Você pode declarar propriedades que podem ser armazenados ou computados como eles são necessários. (Único apoio Enumerations propriedades calculado.)
Métodos: Você pode declarar métodos que podem ser acessados através de qualquer instância desses objetos.
subscritos: Você pode declarar índices que permitem acessar os elementos de uma instância de tipo baseada na lógica no subscrito. Exemplos incluem o fornecimento de vários esquemas de indexação para objetos multi-dimensionais que podem por vezes ser acessados como se fossem matrizes unidimensionais e às vezes usando múltiplas dimensões. Eles também são úteis na gestão de índices de números não inteiros.
initializers: Initializers permitem configurar as propriedades para uma nova instância.
extensões: Extensões permitem que você adicione métodos e propriedades sem necessariamente ter o código para o objeto ao qual você está adicionando-los. (Propriedades Só computadorizada pode ser usada com enumerações.)
protocolos: Você pode definir métodos em um protocolo que deve ser implementada por qualquer objeto que esteja em conformidade com esse protocolo.
Herança: Classes podem herdar um do outro formando uma estrutura subclasse / superclasse. Uma classe pode ter qualquer número de subclasses mas apenas uma (ou nenhuma) da superclasse.
Tipo de seleção de elenco: Você pode tratar uma classe como seu sub ou superclasse se as condições permitirem. Este é basicamente um exercício padrão na lógica. UILabel é uma subclasse de UIView- Portanto, todas as instâncias de UILabel são também exemplos de UIView. Nem todos os casos de UIView são exemplos de UILabel.
Deinitializers: Deinitializers deixá-lo limpar pouco antes de uma instância de classe está prestes a ser desalocada.
ARCO: contagem de referência automático (ARC) permite-lhe ter várias instâncias de uma classe. Quando você passá-los ao redor, eles são passados por referência, de modo que, por exemplo, se você tem duas instâncias de UILabel, definindo o texto para uma UILabel não tem nada a ver com a definição do texto para o outro rótulo.