• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 同一个头文件中的类和类扩展名(类别)

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:28:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当我查看 Cocoa Touch API 时,我可以在同一个头文件中找到一些与类别一起声明的类,例如

@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>

@property (readonly) NSUInteger count;
// and some other properties

@end

@interface NSArray (NSExtendedArray)

@property (readonly, copy) NSString *description;
// and some other properties

@end

现在我正在尝试对我的类(class)做同样的事情,如下所示:

@interface ARCTextbook : NSObject

@property (nonatomic) NSInteger ID;
@property (nonatomic) NSString *name;

@end

@interface ARCTextbook (Student)

@property (nonatomic) NSInteger studentID;
@property (nonatomic, getter=isUsed) BOOL used; // Used by a student?

@end

但是,当我尝试访问 studentIDused 属性时,出现无法识别的选择器错误。我错过了什么吗?

干杯。



Best Answer-推荐答案


这是关联对象,您可以引用以下文档:

http://www.davidhamrick.com/2012/02/12/Adding-Properties-to-an-Objective-C-Category.html

How to store not id type variable use a objc_getAssociatedObject/objc_setAssociatedObject?

ARCTextbook.h

#import <Foundation/Foundation.h>

@interface ARCTextbook : NSObject
@property (nonatomic) NSInteger ID;
@property (nonatomic) NSString *name;
@end

@interface ARCTextbook (Student)

@property (nonatomic) NSInteger studentID;
@property (nonatomic, getter=isUsed) BOOL used; // Used by a student?

@end

ARCTextbook.m

#import "ARCTextbook.h"
#import <objc/runtime.h>

@implementation ARCTextbook

@end

static NSString *kStudentID = @"kStudentID";
static NSString *kUsed = @"kUsed";

@implementation ARCTextbook (Student)
@dynamic studentID;
@dynamic used;

- (void)setStudentIDNSInteger)aStudentID {
    objc_setAssociatedObject(self, (__bridge const void *)(kStudentID), @(aStudentID), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSInteger)studentID {
    return [objc_getAssociatedObject(self, (__bridge const void *)(kStudentID)) integerValue];
}

- (void)setUsedBOOL)aUsed {
    objc_setAssociatedObject(self, (__bridge const void *)(kUsed), @(aUsed), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (BOOL)isUsed {
    return [objc_getAssociatedObject(self, (__bridge const void *)(kUsed)) boolValue];
}

@end

ViewController.m

#import "ViewController.h"
#import "ARCTextbook.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    ARCTextbook *t = [[ARCTextbook alloc] init];
    t.studentID = 2;
    t.used = YES;

}

@end

关于ios - 同一个头文件中的类和类扩展名(类别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28689164/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap