這是一個(gè)約束的代碼庫(kù),他的底層使用到了NSLayoutConstraint進(jìn)行約束丧凤。那下面就對(duì)里面的代碼進(jìn)行一個(gè)解析难衰。
View+SnapKit這是一個(gè)擴(kuò)展(就是我們oc中的分類)是我們使用這個(gè)庫(kù)的入口炉爆。為什么會(huì)選用擴(kuò)展做入口铝耻,這是為了讓使用者使用時(shí)簡(jiǎn)單、簡(jiǎn)潔贞远、明確姊途,而且這樣也對(duì)與開(kāi)發(fā)者有一個(gè)很好的封裝空間可很。
ConstraintMaker這個(gè)類是具體操作約束的類郁稍,block的回調(diào)也是在這里執(zhí)行泡态。具體的方法
通過(guò)block回掉后我們?cè)谕饷婺玫骄唧w操作的對(duì)象,在通過(guò)這個(gè)對(duì)象我們將要約束的一些具體數(shù)據(jù)傳輸過(guò)去袱结。
在這里他使用了一個(gè)比較新穎的鏈?zhǔn)近c(diǎn)語(yǔ)法亮隙。他為什么會(huì)選著這種方法,這是根據(jù)我們使用NSLayoutConstraint方法來(lái)決定的擎勘。(下面在做一個(gè)詳細(xì)的說(shuō)明)
上面通過(guò)block回掉的了ConstraintMaker類咱揍,ConstraintMaker這個(gè)類包含了第一次的點(diǎn)語(yǔ)法所要使用的屬性。每個(gè)屬性是屬于ConstraintDescriptionExtendable協(xié)議的棚饵,這樣是為了實(shí)現(xiàn)get方法的能返回對(duì)象用來(lái)做下一次的點(diǎn)語(yǔ)法,get方法過(guò)程中會(huì)實(shí)例化下一個(gè)對(duì)象和傳入類型并進(jìn)行儲(chǔ)存煤裙。(協(xié)議可以處理返回邏輯但不必知道具體返回什么類型,只要你繼承協(xié)議就可以了噪漾,所以這樣通過(guò)性非常大只要你是用于返回都可以使用)硼砰。
通過(guò)block返回了ConstraintMaker類在調(diào)用這個(gè)類中的屬性返回ConstraintDescription類,這個(gè)過(guò)程我稱之為第一級(jí)欣硼。這一過(guò)程實(shí)際就是將ConstraintAttributes類中的normal存入到ConstraintDescription類中
ConstraintMaker
這一塊是ConstraintAttributes類中的normal
這一塊是實(shí)例化ConstraintItem類在賦值到屬性中
將ConstraintItem中的數(shù)據(jù)在打包存入到ConstraintDescription
這里在是將ConstraintDescription打包存入到數(shù)組中constraintDescriptions
在這最上面是返回了一個(gè)ConstraintDescription有類的返回就可以做下一個(gè)事情了题翰。
先講解到這里下面的下次在進(jìn)行講解