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

本文深入解析Objective-C中的分类和Swift中的拓展概念,包括如何使用分类为现有类添加新方法,以及Swift中如何利用拓展增强类的功能。同时,文章对比了两者之间的区别,如属性的添加方式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OC中分类

分类创建

分类格式:

  • 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等等

引用:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值