给系统类扩展属性(枚举)或方法

作者: 鬼丶白 | 来源:发表于2016-08-24 15:12 被阅读278次

在这里我以UIButton为例子给大家展示一种实现方法,主要依靠runtime实现。废话不说上码...

1.扩展一般属性NSString

@interface UIButton (CJButtonType)
@property (nonatomic, strong) NSString *typeString;
@end
///////////////////////////////////////////////
#import "UIButton+CJButtonType.h"
#import <objc/runtime.h>
@implementation UIButton (CJButtonType)
- (NSString *)typeString {
    return objc_getAssociatedObject(self, @selector(typeString));
}
- (void)setTypeString:(NSString *)typeString {
    objc_setAssociatedObject(self, @selector(typeString), typeString, OBJC_ASSOCIATION_RETAIN_NONATOMIC);   
}
@end

2.扩展枚举类型


#import <UIKit/UIKit.h>
typedef NS_ENUM(NSUInteger, BuyHouseCalculatorType) {
    BuyHouseCalculatorType_PublicReserveFundLoan = 0, 
    BuyHouseCalculatorType_BusinessLoan,              
    BuyHouseCalculatorType_GroupLoan                  
};
@interface UIButton (CJButtonType)
@property (nonatomic, assign) BuyHouseCalculatorType buyHouseCalculatorType;
@end

#import "UIButton+CJButtonType.h"
#import <objc/runtime.h>
// 定义全局静态字符作为关联的Key值
const char *buyHouseCalculatorTypeKey = "buyHouseCalculatorTypeKey";
@implementation UIButton (CJButtonType)
- (void)setBuyHouseCalculatorType:(BuyHouseCalculatorType)buyHouseCalculatorType {
    objc_setAssociatedObject(self, buyHouseCalculatorTypeKey, @(buyHouseCalculatorType), OBJC_ASSOCIATION_ASSIGN);
}
- (BuyHouseCalculatorType)buyHouseCalculatorType {
    return [objc_getAssociatedObject(self, buyHouseCalculatorTypeKey) integerValue];
    
}
@end

3.扩展方法

//// .h
+ (UIButton *)button;
+ (UIButton *)buttonWithTitle:(NSString *)title titleColor:(UIColor *)color;
////  .m
+ (UIButton *)button {
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectZero];
    [button setClipsToBounds:YES];
    [button setExclusiveTouch:YES];
    return button;
}
+ (UIButton *)buttonWithTitle:(NSString *)title titleColor:(UIColor *)color {
    UIButton *button = [UIButton button];
    [button setTitle:title forState:UIControlStateNormal];
    [button setTitleColor:color forState:UIControlStateNormal];
    return button;
}

以上是鄙人的小小见解,喜欢的朋友可以互粉一起学习。。。。。

相关文章

  • 给系统类扩展属性(枚举)或方法

    在这里我以UIButton为例子给大家展示一种实现方法,主要依靠runtime实现。废话不说上码... 1.扩展一...

  • swift 扩展(extension)

    扩展(Extension)用于为已存在的类、结构题或枚举等类型添加新的功能。可以扩展计算型属性、构造函数、方法、下...

  • 每天学一点 Kotlin -- 类的进阶:扩展

    1. 扩展 1.1 类的扩展是给类增加新的方法或属性。 2. 扩展类的方法 1.2 扩展的语法:和定义函数差不多,...

  • 继承和扩展、类别的区别

    继承是用来描述类与类之间的关系的。子类继承于父类,拥有父类的属性和方法。 扩展就是向一个已有的类、结构体或枚举类型...

  • 20、【Swift】扩展 - Extensions

    适用:结构体、枚举、枚举、协议 使用场景增加计算属性(实例和类)【不能扩充存储属性】方法(实例或)构造器下标嵌套类...

  • Swift学习_扩展和协议

    1.扩展 扩展用于为已存在的类、结构体或枚举等类型添加新的功能 1.扩展计算型属性 2.扩展构造函数 扩展构造函数...

  • kotlin 扩展属性

    与扩展方法类似,扩展属性当然也不是真正添加进了原类。 扒开糖衣看看kotlin扩展属性实现原理。 给Date类添加...

  • Swift - 16.扩展(Extensions)

    本章包含内容: 扩展语法 计算型属性 构造器 方法 下标 嵌套类型 扩展就是向一个已有的类、结构体、枚举类型或者协...

  • Swift扩展

    扩展: 就是给一个现存类, 结构体, 枚举或者协议添加新的属性和方法的语法, 无需目标源码, 就可以把想要的代码加...

  • Swift 属性基本使用

    存储属性 <类 枚举 结构体> 的常量或变量(有具体存储空间) 计算属性 <类 枚举 结构体> 属性函数(无存...

网友评论

    本文标题:给系统类扩展属性(枚举)或方法

    本文链接:https://www.haomeiwen.com/subject/fdcosttx.html