OC中分類
分類創(chuàng)建
分類格式:
- UIColor+ColorChange.h頭文件
#import <UIKit/UIKit.h>
@interface UIColor (ColorChange)
// 顏色轉(zhuǎn)換:iOS中(以#開頭)十六進制的顏色轉(zhuǎn)換為UIColor(RGB)
+ (UIColor *) colorWithHexString: (NSString *)color;
@end
- UIColor+ColorChange.m文件
#import "UIColor+ColorChange.h"
@implementation UIColor (ColorChange)
+ (UIColor *) colorWithHexString: (NSString *)color
{
}
@end
- 分類是在原有類的基礎(chǔ)上添加新的方法。
- 分類不能添加屬性陪汽。
- 分類如果非要添加屬性也是可以的:通過runtime機制的associatedObject训唱。ios分類添加屬性
OC中拓展
本質(zhì):是分類,只是一種特殊情況挚冤。也就是匿名分類况增。
類擴展格式:
#import "ViewController.h"
@interface ViewController ()//類拓展
@property (nonatomic, strong) UILabel *lable;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
@end
目的:私有屬性和方法。
實際中經(jīng)常把屬性和方法寫到拓展里训挡,外部類就不能訪問澳骤。
類別與類擴展的區(qū)別:
名稱 | 方法 | 屬性 |
---|---|---|
類別 | 可以添加 | 不能添加(需要associatedObject) |
分類 | 可以添加 | 可以添加 |
swift中拓展
- 為類拓展屬性
extension UIView {
private struct AssociatedKeys {
static var DescriptiveName = "handle"
}
private var eventHanlerColsure : ()->() {
get {
guard let handler = objc_getAssociatedObject(self, &AssociatedKeys.DescriptiveName) as? ()->() else {
return {()->Void in
};
}
return handler;
}
set(newHandle) {
objc_setAssociatedObject(self, &AssociatedKeys.DescriptiveName, newHandle, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
}
}
- 為類拓展方法
- 協(xié)議中拓展:為了實現(xiàn)協(xié)議的方法。
- 也可以類中添加拓展:進行結(jié)構(gòu)分層澜薄。
swift中的拓展不負責私有屬性和方法为肮。因為swift的權(quán)限有關(guān)鍵詞:public、private等等
引用: