代码之家  ›  专栏  ›  技术社区  ›  Alex Wayne

Objective-C类别:我可以为不在我的类别中的方法添加属性吗?

  •  28
  • Alex Wayne  · 技术社区  · 14 年前

    我想使用一个类别,使原始类上的方法也可以作为属性使用。

    甲级:

    @interface ClassA
    - (NSString*)foo;
    @end
    

    A级类别

    @interface ClassA (Properties)
    - (void)someCategoryMethod;
    @property (nonatomic, readonly) NSString *foo;
    @end
    

    当我这样做的时候,它似乎起作用了( 编辑: 也许它不起作用,它没有抱怨,但我看到了一些奇怪之处),但是它给了我警告,因为我没有在我的类别实现中合成属性。既然原始类为我合成了属性,我如何告诉编译器一切实际上都很好?

    3 回复  |  直到 10 年前
        1
  •  32
  •   codewarrior    14 年前

    以下是您得到的警告:

    warning: property ‘foo’ requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation

    要禁止此警告,请在实现中包含此警告:

    @dynamic foo;

        2
  •  1
  •   Josh Freeman    14 年前

    如果在类别的接口中声明了某些内容,则其定义属于类别的实现。

        3
  •  1
  •   Dan Rosenstark    10 年前

    我写了两篇关于这个的文章,尽管这个概念和你问的问题略有不同。

    1. 将属性添加到类别而不接触基类: http://compileyouidontevenknowyou.blogspot.com/2012/06/adding-properties-to-class-you-dont.html
    2. 从以下类别访问IVARS: http://compileyouidontevenknowyou.blogspot.com/2012/06/if-you-want-to-keep-everything-in-your.html

    这比旋转方法要好得多,至少:更安全。