通过扩展类来增强类的扩展性。非常好用的一个增强类功能的方式,可以参考C#的 partial
部分类。
下面的例子直接使用扩展类。不修改原类型 Foo
的前提下,给 Foo
添加了一个 GetDescription
实例方法。并且访问了 Foo
的 stringOnFoo
属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #import <Foundation/Foundation.h> #import "Foo.h"
@interface Foo (Print) -(NSString*)GetDescription; @end
@implementation Foo (Print) -(NSString*)GetDescription { if (self.stringOnFoo) { NSLog(@"%@",self.stringOnFoo); return self.stringOnFoo; } return @""; } @end
int main(int argc, const char * argv[]) { Foo* fo = [[Foo alloc]init]; fo.stringOnFoo = @"helloworld"; [fo GetDescription]; return 0; }
|
扩展类型的时候记得要加上属于自己的前缀,因为在原类型中可能后续会追加与扩展类的重名的方法签名,导致无法调用,即被扩展类的方法覆盖。
匿名类扩展
我在这里声明了一个匿名的扩展类型。然后在 Foo.m 中进行了实现。这个接口声明对使用者隐藏了。所以也不用 import 这个匿名头文件,可以直接调用。
1 2 3 4 5 6 7 8 9 10 11
| @interface Foo() -(void)InvokePrivateMethod; @end
int main(int argc, const char * argv[]) { Foo* fo = [[Foo alloc]init]; [fo InvokePrivateMethod]; return 0; }
|
本文标题:Extension in iOS
文章作者:Keyle
发布时间:2017-03-06
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/f84fd914/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可