What is the Objective-C equivalent of a public get/protected set property in C#

前端 未结 3 1171
[愿得一人]
[愿得一人] 2020-12-10 11:30

Is there any way to create a property like this C# property in Objective-C?

public int prop { get; protected set;}

Essentially, I want to m

相关标签:
3条回答
  • 2020-12-10 12:15

    The easiest way to accomplish this is to declare the property as readonly in the public interface for MyClass (i.e. the .h file):

    @property (readonly) NSInteger prop;
    

    Then, in .m file for that class, declare a class extension (a category with an empty name). In class extensions, you may redeclare a @property to change its writeability to readwrite:

    @interface MyClass ()
    @property (readwrite) NSInteger prop;
    @end
    
    @implementation MyClass
    @synthesize prop;
    ...
    @end
    

    Of course, Objective-C does not enforce access restrictions, so there's nothing stopping some rogue code from calling -[MyClass setProp:]. The compiler will flag this as a warning, however, which is as good as you can get in Objective-C. Unfortunately, there is no standard way to document this "protected" writeable property to subclasses; you'll have to settle on a convention for your team and or put it in the public documentation for the class if it's in a framework that you're going to release.

    0 讨论(0)
  • 2020-12-10 12:20

    I believe you are looking for the readonly attribute on the @property

    @property (readonly) NSInteger prop;
    

    Read more here.

    0 讨论(0)
  • 2020-12-10 12:29

    There's no way to make methods @private/@protected in ObjC, these compiler directoves apply only on instance variables. You can, however, declare a static C function in the same file to get a "@private" method.

    keno's answer seems like most correct way of achieving this.

    0 讨论(0)
提交回复
热议问题