Jaký je Objective-C ekvivalentem veřejné get / chráněného majetku stanoveného v jazyce C #

hlasů
19

Existuje nějaký způsob, jak vytvořit vlastnost, jako je tento C # majetku v Objective-C?

public int prop { get; protected set;}

V podstatě chci, aby bylo možné získat hodnotu z mimo třídu, ale jen bylo možné nastavit hodnotu v rámci třídy.

Položena 27/08/2009 v 02:36
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
24

Nejjednodušší způsob, jak toho dosáhnout, je deklarovat vlastnost, jak readonlyve veřejném rozhraní MyClass(tj soubor .h):

@property (readonly) NSInteger prop;

Pak, v .so souboru pro danou třídu deklarovat třídu rozšíření (kategorie s prázdným názvem). V nástavbách třídy, můžete znovu deklarovat na @property změnit svůj writeability na čtení a zápis:

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

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

Samozřejmě, Objective-C nevynucuje omezení přístupu, takže není nic zastavit nějaký rogue kód z povolání -[MyClass setProp:]. Kompilátor příznak to jako varování, nicméně, který je tak dobrý, jak se můžete dostat do Objective-C. Bohužel, neexistuje žádný standardní způsob, jak dokumentovat toto „chráněného“ zapisovatelné vlastnost podtřídy; budete muset domluvit na konvence pro svůj tým a nebo jej ve veřejném dokumentaci pro danou třídu, pokud je to v rámci, který jste chystá k vydání.

Odpovězeno 27/08/2009 v 05:24
zdroj uživatelem

hlasů
1

Neexistuje žádný způsob, jak metody @ private / @ chráněna ObjC tyto kompilátor directoves vztahují pouze na proměnných instance. Je však možné prohlásit statickou funkci C ve stejném souboru, aby si „@private“ metodu.

Keno odpověď jeví jako nejsprávnější způsob, jak toho dosáhnout.

Odpovězeno 27/08/2009 v 03:02
zdroj uživatelem

hlasů
1

Věřím, že hledáte pouze pro čtení atributu na @property

@property (readonly) NSInteger prop;

Čtěte více zde .

Odpovězeno 27/08/2009 v 02:44
zdroj uživatelem

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