O ObjectiveC.swift
arquivo da biblioteca padrão contém as seguintes linhas de código em torno da linha 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
O que open var
significa nesse contexto ou qual é a open
palavra - chave em geral?
open
epublic
?")Respostas:
open
é um novo nível de acesso no Swift 3, introduzido com a implementação doEstá disponível com o instantâneo Swift 3 de 7 de agosto de 2016 e com o Xcode 8 beta 6.
Em resumo:
open
classe é acessível e subclassável fora do módulo de definição. Umopen
aluno é acessível e substituível fora do módulo de definição.public
classe é acessível, mas não é subclassável fora do módulo de definição. Umpublic
membro da classe está acessível, mas não pode ser substituído, fora do módulo de definição.Assim
open
é o quepublic
costumava ser nas versões anteriores do Swift e o acesso depublic
foi restrito. Ou, como Chris Lattner coloca no SE-0177: Permite distinguir entre acesso público e substituibilidade pública :No seu exemplo,
open var hashValue
é uma propriedade que é acessível e pode ser substituída nasNSObject
subclasses.Para mais exemplos e detalhes, consulte o SE-0117 .
fonte
public
no Swift 3, é comopublic final
no Swift 2, eopen
é assimpublic
?Leia aberto como
Repito aberto para herança em outros módulos. Portanto, uma classe aberta é aberta para subclassificação em outros módulos que incluem o módulo de definição. Vars e funções abertos estão abertos para substituir em outros módulos. É o nível de acesso menos restritivo. É tão bom quanto o acesso público aceitar que algo público seja fechado para herança em outros módulos.
De Apple Docs :
fonte
Aberto é um nível de acesso, foi introduzido para impor limitações à herança de classes no Swift.
Isso significa que o nível de acesso aberto só pode ser aplicado a classes e membros da classe .
Nas aulas
Uma classe aberta pode ser subclassificada no módulo em que é definida e nos módulos que importam o módulo no qual a classe está definida.
Membros da classe
O mesmo se aplica aos alunos. Um método aberto pode ser substituído por subclasses no módulo em que é definido e nos módulos que importam o módulo no qual o método está definido.
A NECESSIDADE DESTA ATUALIZAÇÃO
Algumas classes de bibliotecas e estruturas não foram projetadas para serem subclassificadas e isso pode resultar em comportamento inesperado. A biblioteca nativa da Apple também não permitirá substituir os mesmos métodos e classes,
Portanto, após essa adição, eles aplicarão os níveis de acesso público e privado de acordo.
Para obter mais detalhes, consulte a documentação da Apple sobre controle de acesso.
fonte
Exceto pela subclasse, um
open class func
também é acessível de qualquer lugar do seu projeto. Digamos que você esteja definindo uma função de classe aberta na sua classe Util como estaEm qualquer lugar de seus controladores de exibição, você pode simplesmente acessar esse método chamando
fonte
aberto vem para jogar quando se lida com vários módulos.
A classe aberta é acessível e subclassável fora do módulo de definição. Um membro de classe aberto é acessível e substituível fora do módulo de definição.
fonte
aberto é apenas para outro módulo, por exemplo: vagens de cacau ou teste de unidade, podemos herdar ou substituir
fonte