在開發(fā)過(guò)程中使用純代碼布局治唤,可能經(jīng)常性的會(huì)遇到一些約束上的問(wèn)題痰娱,有的時(shí)候是約束不足,有的時(shí)候是多了藻三。這種情況下诡壁,SnapKit
會(huì)為你打印一些信息济瓢,來(lái)輔助我們排查問(wèn)題,而實(shí)現(xiàn)這些打印信息的功能就在 Debugging.swift
中妹卿。
Debugging
想要打印出對(duì)象的描述旺矾,方法就是 override
其 description
計(jì)算屬性。
public extension LayoutConstraint {
override public var description: String {
var description = "<"
description += descriptionForObject(self)
if let firstItem = conditionalOptional(from: self.firstItem) {
description += " \(descriptionForObject(firstItem))"
}
if self.firstAttribute != .notAnAttribute {
description += ".\(descriptionForAttribute(self.firstAttribute))"
}
description += " \(descriptionForRelation(self.relation))"
if let secondItem = self.secondItem {
description += " \(descriptionForObject(secondItem))"
}
if self.secondAttribute != .notAnAttribute {
description += ".\(descriptionForAttribute(self.secondAttribute))"
}
if self.multiplier != 1.0 {
description += " * \(self.multiplier)"
}
if self.secondAttribute == .notAnAttribute {
description += " \(self.constant)"
} else {
if self.constant > 0.0 {
description += " + \(self.constant)"
} else if self.constant < 0.0 {
description += " - \(abs(self.constant))"
}
}
if self.priority.rawValue != 1000.0 {
description += " ^\(self.priority)"
}
description += ">"
return description
}
}
雖然從代碼上看就是簡(jiǎn)單的不斷拼接字符串夺克,但細(xì)節(jié)實(shí)現(xiàn)還是有一個(gè)點(diǎn)可以學(xué)習(xí)一下的箕宙。
方法重載和泛型
Swift
不同于 Objective-C
,方法可以只有參數(shù)不同铺纽。與此同時(shí)柬帕,泛型為我們?cè)黾恿朔椒ǖ目蓴U(kuò)展性——不再局限于某一種類型。如下兩個(gè)方法就是用來(lái)把可選和非可選類型統(tǒng)一轉(zhuǎn)成可選類型使用的(然而我并不知道為啥要這么做……逃)
private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> {
return object
}
private func conditionalOptional<T>(from object: T) -> Optional<T> {
return Optional.some(object)
}
就這一個(gè)點(diǎn)狡门,完陷寝。
原文地址:SnapKit 源碼解讀(六):Debugging
如果覺得我寫的還不錯(cuò),請(qǐng)關(guān)注我的微博@小橘爺融撞,最新文章即時(shí)推送~