【问题标题】:UIFont Class Crashed app in SwiftSwift 中的 UIFont 类崩溃的应用程序
【发布时间】:2015-09-07 20:43:08
【问题描述】:

我有一个 UIFont 类,如下所示:

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

我这样调用方法"

let fonts = FontHelper.defaultFont(12)

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

不知道为什么?

【问题讨论】:

    标签: ios swift class uifont


    【解决方案1】:

    应该这样称呼

    let fonts =  FontHelper().defaultFont(mySize)
    

    【讨论】:

    • 虽然这个答案解决了问题,但我认为我更喜欢贾斯汀罗斯关于使用扩展的答案。它好多了。另外,我认为我们可能只是将结构的方法声明为static,这也是首选。我们真的不必实例化结构......但无论如何+1。
    【解决方案2】:

    由于您将自己的个人功能添加到 Type,我认为您应该使用 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 具有您刚刚添加的这个非常酷的功能。

    在你的班级里,叫它:

    let font = UIFont.defaultFont(12)
    

    希望您能在这里看到扩展的强大功能,所以在Swift中充分利用它们吧!

    【讨论】:

    • 我认为这是最好的解决方案。这个解决方案对于像UIColor 这样的其他UIKit 类特别方便,我们已经习惯了像UIColor.blackColor() 这样的东西。如果没有扩展,就无法添加这样的自定义颜色。
    【解决方案3】:

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

    我认为 iOS 在使用 fontWithName: size: 时需要字体的 PostScript 名称,您可以通过在 Apple 的字体手册中打开字体并输入 command+I 来查找/验证。

    也许这对你有帮助。

    【讨论】:

      【解决方案4】:

      如果您在项目中手动添加自定义字体,则需要先注册字体,然后才能在运行时使用它:

      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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        • 2011-01-21
        • 1970-01-01
        • 2015-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多