OC与C结构体

结构体一般都只有数据成员,而没有函数成员。也就是像int、double这样的数据类型,函数需要单独定义。

所以想要C结构体中绑定一个函数就需要用到指针函数。

UserInfo.h

typedef struct _user {
    int year;
    int month;
    char *name;
    int(*add)(int a, int b);
    UILabel*(*label)(char *title);
}User;

static int fun_add(int a, int b) {
    return a+b;
}

static UILabel *label(char *title) {
    
    UILabel *label = [UILabel new];
    
    label.text = [NSString stringWithCString:title encoding:NSUTF8StringEncoding];
    
    label.backgroundColor = [UIColor greenColor];
    
    return label;
}

@interface UserInfo : NSObject

+(User)sharedInstance;

@end

UserInfo.m

@implementation UserInfo
+(User)sharedInstance {
    struct _user obj = {
        2,
        5,
        "张三",
        .add = fun_add,
        .label = label,
    };
    return obj;
}
@end

在控制器中的使用

User demo = [UserInfo sharedInstance];
int res = demo.add(1, 3);
NSLog(@"res=%d", res);
NSLog(@"year=%d", demo.year);
NSLog(@"name=%s", demo.name);

UILabel *label = demo.label("中国欢迎你");
label.frame = CGRectMake(300, 100, 300, 200);
[self.view addSubview:label];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,764评论 0 4
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,043评论 0 12
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,387评论 0 6
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,450评论 0 35