巧用 Class Extension 分離接口依賴

Class Extension 和 Category 是我們經(jīng)常使用的 Objective-C 語法:

// Class Extension
@interface Sark ()
@end

// Category
@interface Sark (Gay)
@end

— 正題分割線 —

除此之外,Class Extension 還能巧妙的解決一個(gè)接口暴露問題,若有下面的聲明:

// Sark.framework/Sark.h
@interface Sark : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *creditCardPassword; // secret!
@end

// Sark.framework/PrivateSarkWife.h
@interface PrivateSarkWife : NSObject

  • (void)robAllMoneyFromCreditCardOfSark:(Sark *)sark; // needs password!
    @end

假設(shè) Sark.h 是 Sark.framework 唯一暴露的 Header,而 framework 中的一個(gè)私有類需要獲取這個(gè)公共類的某個(gè)屬性(或方法)該怎么辦?上面的 creditCardPassword 屬性需要一個(gè)對(duì)外不可見而對(duì)內(nèi)可見的地方聲明,這時(shí)候可以利用 Class Extension:

// Sark.h
@interface Sark : NSObject
@property (nonatomic, copy) NSString *name;
@end

// Sark+Internal.h <--- new
@interface Sark ()
@property (nonatomic, copy) NSString *creditCardPassword;
@end

// Sark.m
/#import "Sark.h"
/#import "Sark+Internal.h" // <--- new

將對(duì)公業(yè)務(wù)和對(duì)私業(yè)務(wù)用 Class Extension 的形式拆到兩個(gè) Header 中,這樣私有類對(duì)私有屬性的依賴就被成功隔離開了:

// PrivateSarkWife.m
/#import "PrivateSarkWife.h"
/#import "Sark+Internal.h" // <--- 私有依賴

@implementation PrivateSarkWife

  • (void)robAllMoneyFromCreditCardOfSark:(Sark *)sark {
    NSString *password = sark.creditCardPassword; // oh yeah!
    }
    @end

摘抄自 -- 孫源(sunnyxx)--[巧用 Class Extension 分離接口依賴]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容