ios 鏈式編程初涉及基本語法

簡介

相信大部分ios開發(fā)人員都使用過Masonry(強大約束封裝框架),對它的make.left.equalTo()或者make.left.equalTo().and.right.equalTo()應該有很深刻的印象吧,這種編程方式就叫鏈式編程。從它的語法可以看出它的任務方法是一步步的“點”出來,然后執(zhí)行,可讀性和操作性都很高,那么這是怎么實現(xiàn)的?

分析與實現(xiàn)

先來看看它的“點”語法:在ios中,“點”語法很常見,比如我要創(chuàng)建一個label,并設置一些屬性:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 300, 60, 30)];
label.text = @"";
label.font = [UIFont systemFontOfSize:16];
label.textColor = [UIColor redColor];
[self.view addSubview:label];

創(chuàng)建好后,感覺每次都要用label對象“點”屬性出來設置,有點麻煩。那可不可以像Masonry那樣,一個對象,直接“點”一連竄任務出來實現(xiàn),是不是就要方便一些。比如像下面這樣:

label.text(@"喔喔喔").textFont([UIFont fontOfSize:16]).textColor([UIColor redColor]);

有Masonry在前,不用想太多,那肯定是可以實現(xiàn)的,現(xiàn)在就來看看如何一步步實現(xiàn)吧。
都知道,對象“點”屬性(如:label.text),既然對象才能調(diào)出屬性,那我們在設置text的方法中攜帶一個該對象,是不是就能繼續(xù)往下調(diào)用?,F(xiàn)在我重新聲明一個text方法,讓其攜帶一個label對象(實現(xiàn)文件為UILabel的類別文件)

- (UILabel *(^)(NSString *text))cp_text;

加個前綴cp是為了區(qū)分系統(tǒng)的text方法

該方法的返回值是一個block,block內(nèi)又返回了一個UILabel對象,^表示這是一個代碼塊,NSString *text這是傳入的參數(shù)。再來看看實現(xiàn):

- (UILabel *(^)(NSString *text))cp_text
{
    return ^(NSString *text)
    {
        self.text = text;
        return self;
    };
}

整體返回了一個block,block內(nèi)部執(zhí)行的邏輯就是對label.text的賦值和返回該對象,返回對象就是用于連續(xù)調(diào)用其他類似的方法。按照這種思路,再來實現(xiàn)UILabel的其他幾個方法:

- (UILabel *(^)(UIColor *color))cp_textColor
{
    return ^(UIColor *color)
    {
        self.textColor = color;
        return self;
    };
}

- (UILabel *(^)(UIFont *font))cp_textFont
{
    return ^(UIFont *font)
    {
        self.font = font;
        return self;
    };
}

現(xiàn)在來看看連續(xù)調(diào)用:

UILabel *label = UILabel.cp_init.cp_frame(100,300,60,30);
label.cp_text(@"喔喔喔").cp_textFont(SFONT(16)).cp_textColor(RedColor);
self.view.cp_addSubView(label);

為了語法統(tǒng)一,我對其初始化方法也封裝了一次,使其整體看起來比較連貫,流暢。

總結(jié)

鏈式編程在ios oc中使用頻率并不高,不過在其環(huán)環(huán)相扣的語法上來看,某些時候調(diào)用起來確實很方便。我寫了個demo,封裝了UIView,UILabel,UIButton的一些屬性和方法,感興趣的可以去我的項目地址下載下來看看。
git項目地址

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

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

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