UIFont Class 在 Swift 中崩溃的应用程序

UIFont Class Crashed app in Swift

我有一个 UIFont Class 看起来像这样:

struct FontHelper {
    func defaultFont(size: CGFloat) -> UIFont {
        return UIFont(name:"Helvetica", size: size)!
    }
}

我这样调用方法

let fonts = FontHelper.defaultFont(12)

但是我的应用程序在包装可选时因意外发现 nil 而崩溃?

不知道为什么?

应该这样称呼

let fonts =  FontHelper().defaultFont(mySize)

由于您要将自己的个人功能添加到 Type,我认为您应该使用 extension ,在你的 class:

之外声明这个 extension
extension UIFont {
    // You can set a default value for the size if the user doesn't provide one.
    class func defaultFont(_ size: CGFloat = 12) -> UIFont {
        return UIFont(name:"Helvetica", size: size)!
    }
}

现在,UIFont Type 具有您刚刚添加的非常酷的功能。

在你的 class 中,称它为:

let font = UIFont.defaultFont(12)

我希望你能在这里看到 extensions 的强大功能,所以在 [=42 中充分利用它们=]

当你和 UIFont(name:"HelveticaCE-Regular", size:14.0) 一起工作时

我相信 iOS 在使用 fontWithName: size: 时需要字体的 PostScript 名称,您可以 find/verify 通过在 Apple 的字体簿中打开字体 并输入 command+I.

也许这对你有帮助。

如果您手动将自定义字体添加到您的项目中,您需要在运行时使用之前注册这些字体:

func loadFont(withName fontName: String) {
    guard let fontURL = Bundle.main.url(forResource: fontName, withExtension: "ttf"),
          let fontData = try? Data(contentsOf: fontURL) as CFData,
          let provider = CGDataProvider(data: fontData),
          let font = CGFont(provider) else { return }
    CTFontManagerRegisterGraphicsFont(font, nil)
}

// For example, this array need to contain the fonts filenames without extension.
let fontNames = ["Roboto-Black", "Roboto-Regular", "Roboto-Bold"]

for fontName in fontNames {
    loadFont(withName: fontName)
}