OC中分类,拓展 和 swift中拓展

OC中分类

分类创建

image

分类格式:

  • UIColor+ColorChange.h头文件
#import <UIKit/UIKit.h>

@interface UIColor (ColorChange)

// 颜色转换:iOS中(以#开头)十六进制的颜色转换为UIColor(RGB)
+ (UIColor *) colorWithHexString: (NSString *)color;
@end
  • UIColor+ColorChange.m文件
#import "UIColor+ColorChange.h"

@implementation UIColor (ColorChange)

+ (UIColor *) colorWithHexString: (NSString *)color
{

}
@end
  • 分类是在原有类的基础上添加新的方法。
  • 分类不能添加属性。
  • 分类如果非要添加属性也是可以的:通过runtime机制的associatedObject。ios分类添加属性

OC中拓展

本质:是分类,只是一种特殊情况。也就是匿名分类。

类扩展格式:

#import "ViewController.h"

@interface ViewController ()//类拓展

@property (nonatomic, strong) UILabel *lable;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

@end

目的:私有属性和方法。

实际中经常把属性和方法写到拓展里,外部类就不能访问。

类别与类扩展的区别:

名称 方法 属性
类别 可以添加 不能添加(需要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);
        }
    }
}
  • 为类拓展方法
  • 协议中拓展:为了实现协议的方法。
  • 也可以类中添加拓展:进行结构分层。

swift中的拓展不负责私有属性和方法。因为swift的权限有关键词:public、private等等

引用:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 生命是一场盛大的旅行,而我们偶然经过了生。 在听到乔任梁的死亡消息时我正在床上躺着看手机,这是一条突然...
    久本阅读 3,328评论 4 5
  • 独自徘徊在深夜 遗忘该去哪儿将心上人寻 身临江畔 涛声渐去 夜空群星璀璨 它们在明灭间谱曲 浪花翻出白朵 似舞动的...
    巴克比克阅读 1,414评论 0 0

友情链接更多精彩内容