iOS SDK 开发 -- 控制接口暴露

作者: YxxxHao | 来源:发表于2016-11-14 17:27 被阅读1000次

    在 SDK 开发中,经常会碰到一个问题,假设 SDKUser.h 是 SDK 对外暴露的 Header, 其中 SDKUser 类型中的 uid 属性是不对外暴露的,但在 SDK 中的某些私有类需要获取这个属性(或方法),这个时候我们需要怎么处理呢?uid 属性是一个对 SDK 外是不可以见的,但对 SDK 内是可见的,这种情况,就可以使用 Category 来解决这个问题:

    SDKUser.h 对外暴露的头文件:

    @interface SDKUser : NSObject
    
    @property(nonatomic, copy, readonly) NSString *username;
    
    @end
    

    在对外暴露的 Header 中,如果我们不希望外部来写这个对象的时候,我们需要将属性设置为只读属性,但是我们又需要在对内支持读写,这时我们需要在实现文件里重新设置该属性支持读写操作。

    SDKUser.m 实现文件:

    #import "SDKUser.h"
    
    @interface SDKUser()
    
    // 对外属性
    @property(nonatomic, copy, readwrite) NSString *username;
    
    // 只对内属性
    @property(nonatomic, copy, readwrite) NSString *uid;
    
    @end
    
    @implementation SDKUser
    
    @end
    

    因为 username 属性在 SDK 内是支持读写操作的,所以需要设置为 readwrite,而 uid 这个属性这里是不希望暴露给用户的,所以我们将该属性定义在 .m 文件里中,但是定义 .m 文件里时,只支持类内的访问,如果 SDK 内的其它私有类想访问就无法访问到这个属性了。

    这种情况下,我们可以对 SDKUser 这个类进行 Category,并将 SDK 里的相关私有属性(或方法)实现在里面:

    #import "SDKUser.h"
    
    @interface SDKUser (SDKInner)
    
    // 基本属性
    @property(nonatomic, copy) NSString *uid;
    @property(nonatomic, copy, readonly) NSString *username;
    
    @end
    
    
    --------------------------------
    
    
    #import "SDKUser+SDKInner.h"
    
    @implementation SDKUser (SDKInner)
    
    @end
    

    这样的话 SDK 内的私有类就可以访问 SDKUser 里面的 uid 属性,并且又不会暴露给开发者。

    最后,在这里卖个广告,我创建了一个 iOS SDK 开发的群,群号:127548419,有兴趣的就加下。

    相关文章

      网友评论

      • ShenYj:最近开始写SDK, 有些问题想要咨询一下
      • 没有梦想_何必远方:可是我工作这么久了,我其实都不知道extension是什么。

      本文标题:iOS SDK 开发 -- 控制接口暴露

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