Qual é o equivalente de Objective-C de um get / propriedade definida protegido pública em C #

votos
19

Existe alguma maneira para criar uma propriedade como esta C propriedade # em Objective-C?

public int prop { get; protected set;}

Essencialmente, eu quero torná-lo possível para obter o valor de fora da classe, mas apenas para ser capaz de definir o valor de dentro da classe.

Publicado 27/08/2009 em 02:36
fonte usuário
Em outras línguas...                            


3 respostas

votos
24

A maneira mais fácil de conseguir isso é para declarar a propriedade como readonlyna interface pública para MyClass(ou seja, o arquivo .h):

@property (readonly) NSInteger prop;

Então, em arquivo .m para essa classe, declare uma classe de extensão (uma categoria com um nome vazio). Em extensões de classe, você pode redeclare um @property para mudar sua writeability para READWRITE:

@interface MyClass ()
@property (readwrite) NSInteger prop;
@end

@implementation MyClass
@synthesize prop;
...
@end

Claro, Objective-C não impõe restrições de acesso, então não há nada que impeça algum código desonestos de chamar -[MyClass setProp:]. A bandeira compilador isso como um aviso, no entanto, que é tão bom quanto você pode entrar em Objective-C. Infelizmente, não há nenhuma maneira padrão para documentar esta propriedade gravável "protegido" para subclasses; você vai ter que se contentar em uma convenção para sua equipe e ou colocá-lo na documentação pública para a classe se ele está em um quadro que você está indo para liberar.

Respondeu 27/08/2009 em 05:24
fonte usuário

votos
1

Não há nenhuma maneira de fazer métodos @ private / @ protegidos em ObjC, estes directoves compilador aplicam-se apenas sobre as variáveis ​​de instância. Você pode, no entanto, declarar uma função C estática no mesmo arquivo para obter um método "@private".

A resposta de keno parece que a maioria maneira correta de conseguir isso.

Respondeu 27/08/2009 em 03:02
fonte usuário

votos
1

Eu acredito que você está procurando o atributo somente leitura no @property

@property (readonly) NSInteger prop;

Leia mais aqui .

Respondeu 27/08/2009 em 02:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more