Masonry中鏈?zhǔn)骄幊痰膶?shí)現(xiàn)

1、前言

我們都知道,Masonry是可以實(shí)現(xiàn)make.left.mas_equalTo(@15);這種寫法,那Masonry大神是如何實(shí)現(xiàn)的呢?下面我們通過一個(gè)例子進(jìn)行探究。

2、實(shí)例探究

我們來試想這樣一個(gè)場景,我們想實(shí)現(xiàn)一個(gè)Person類,類中有如下三個(gè)屬性:

@interface Person () 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *phoneNum;
@property (nonatomic, copy) NSString *address; 
@end

那我們?nèi)绾螌?shí)現(xiàn)self.name(@"塵埃").phoneNum(@"123").address(@"北京")?

在這里我們需要思考兩個(gè)問題:
1、如何使用 . 鏈?zhǔn)秸{(diào)用?
2、如何傳參?

第一個(gè)問題相對簡單,我們都知道實(shí)現(xiàn) . 的調(diào)用,本質(zhì)就是使用當(dāng)前對象調(diào)用方法,從而進(jìn)行消息轉(zhuǎn)發(fā),那我在每一個(gè)屬性的返回值返回當(dāng)前對象self就可以了。例如下圖:

- (Person *)name {
        
    NSLog(@"名字是?");
    return self;
}

- (Person *)phoneNum {
    
    NSLog(@"手機(jī)號(hào)是?");
    return self;
}

- (Person *)address {
    
    NSLog(@"地址是?");
    return self;
}

就可以使用self.name.phoneNum.address來調(diào)用啦。

第二個(gè)問題:傳參。我們知道傳參有多種方式:block,代理,通知,函數(shù)指針等等,因?yàn)槲覀儍H僅是兩個(gè)值之間的傳值,所以代理、通知、函數(shù)指針等都可以排除掉。那block的優(yōu)勢是什么呢?

我們知道block相當(dāng)于儲(chǔ)存代碼塊,那對于block如何使用,我們繼續(xù)向下看。

- (Person * (^)(NSString *))name {
    
    return ^(NSString *personName) {
        
        NSLog(@"名字是%@", personName);
        return self;
    };
}

- (Person * (^)(NSString *))phoneNum {
    
    return ^(NSString *phoneNum) {
        
        NSLog(@"手機(jī)號(hào)是%@", phoneNum);
        return self;
    };
}

- (Person * (^)(NSString *))address {
    
    return ^(NSString *address) {
        
        NSLog(@"地址是%@", address);
        return self;
    };
}

如上代碼所示,返回一個(gè)帶有實(shí)例對象返回值類型的block就可以了。以上我們就可以實(shí)現(xiàn)本章的最終目的了。
調(diào)用self.name(@"塵埃").phoneNum(@"123").address(@"北京")結(jié)果為:

名字是塵埃
手機(jī)號(hào)是123
地址是北京

以上就是我們對所有類似鏈?zhǔn)骄幊痰奶骄苛恕?/p>

3、最后

學(xué)無止境,且行卻珍惜。寫博客經(jīng)驗(yàn)不多,希望看到本篇博客的大佬們多多留言扶正。后續(xù)會(huì)繼續(xù)更新其他學(xué)習(xí)相關(guān)。

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

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,115評(píng)論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評(píng)論 1 32
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評(píng)論 0 38
  • 之所以不想回家的原因之一是買個(gè)票煩死人。 目前訂了2張票了。 花了1200~肯定要退一張。明看看退哪張合適。
    白藜蘆醇閱讀 81評(píng)論 0 0
  • 水是生命之源! 我們每個(gè)人都離不開水。 我到泰國旅游的時(shí)候,爸爸帶我去大海里游泳,海水藍(lán)藍(lán)的、咸咸的...... ...
    潞小豆MaMa閱讀 231評(píng)論 0 1

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