only return a font if a style is found

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-11-10 14:42:29 -06:00
parent 69ad6e9fb1
commit 64d9ca3777

View File

@ -262,17 +262,20 @@ extension TypographicalStyle {
}
extension TypographicalStyle {
public static func style(for fontName: String, size: CGFloat) -> TypographicalStyle {
public static func style(for fontName: String, size: CGFloat) -> TypographicalStyle? {
//filter all styles by fontName
let styles = allCases.filter{$0.fontFace.fontName == fontName }.sorted { lhs, rhs in lhs.pointSize < rhs.pointSize }
//if there are no styles then return defaultStyle
guard styles.count > 0 else { return defaultStyle }
styles.forEach{print("\($0.rawValue): \($0.pointSize)")}
//if there are no styles then return nil
guard styles.count > 0 else { return nil }
//if there is an exact match on a style with this pointSize then return it
if let style = styles.first(where: {$0.pointSize == size }) {
return style
} else if let largerIndex = styles.firstIndex(where: { $0.pointSize > size}) { //find the closet one to pointSize
return styles[max(largerIndex - 1, 0)]
} else { //return the last style
return styles.last!
}