Em Swift, qual é a maneira convencional de definir o padrão comum onde uma propriedade deve ser somente leitura externamente, mas modificável internamente pela classe (e subclasses) que a possuem.
Em Objective-C, existem as seguintes opções:
- Declare a propriedade como somente leitura na interface e use uma extensão de classe para acessar a propriedade internamente. Este é o acesso baseado em mensagem, portanto, funciona bem com KVO, atomicidade, etc.
- Declare a propriedade como somente leitura na interface, mas acesse o ivar de apoio internamente. Como o acesso padrão para um ivar é protegido, isso funciona bem em uma hierarquia de classes, onde as subclasses também podem modificar o valor, mas o campo é somente leitura.
Em Java, a convenção é:
- Declare um campo protegido e implemente um getter (método) público somente leitura.
Qual é o idioma do Swift?
fonte
var
palavra-chave que faltava para fazer a compilação.)public
- deveria serinternal
ou nada (o que é padronizado para qualquer classe -public
ouinternal
) - isto éprivate(set) var readonlyProperty: Int
private
agora se restringe à declaração atual (não ao arquivo) efileprivate
está disponível para restringir ao arquivo atual. Tambémpublic
tem algumas restrições e nãoopen
é necessário para nenhuma restrição. Detalhes aqui .De acordo com @Antonio, podemos usar uma única propriedade para acessar como o
readOnly
valor da propriedade pública ereadWrite
privada. Abaixo está minha ilustração:E aqui está a saída:
fonte