【问题标题】:'UIFont' is not convertible to 'UIFont?''UIFont' 不能转换为 'UIFont?'
【发布时间】:2016-03-31 23:58:42
【问题描述】:

所以我今天晚上将我的 XCode 更新到了 7.3。

在我的一个项目中,我在设置字体的几个标签上收到以下错误:

'(name: String, size: CGFloat) -> UIFont' is not convertible to '(name: String, size: CGFloat) -> UIFont?'

编辑:这是我在导航栏中标题视图的代码:

let aTitleFrame: CGRect = CGRectMake(0, aHeaderTitleSubtitleView.frame.midY / 2, 200, 24)
let aTitleView: UILabel = UILabel(frame: aTitleFrame)
aTitleView.backgroundColor = UIColor.clearColor()
aTitleView.font = UIFont(name: "Roboto-Regular", size: 15) // ERROR POPS UP HERE
aTitleView.textAlignment = NSTextAlignment.Center
aTitleView.textColor = UIColor.whiteColor()

这是我的 UILabel 属性字符串代码:

let aAttributedFundLabel: NSMutableAttributedString = NSMutableAttributedString(string: "Raising\n$ \(fund)")
aAttributedFundLabel.addAttribute(NSForegroundColorAttributeName, value: UIColor.darkGrayColor(), range: NSRange(location: 0, length: 7))
aAttributedFundLabel.addAttribute(NSFontAttributeName, value: UIFont(name: "Roboto-Regular", size: 15)!, range: NSRange(location: 0, length: 7)) // ERROR POPS UP HERE 
aAttributedFundLabel.addAttribute(NSForegroundColorAttributeName, value: UIColor.blackColor(), range: NSRange(location: 8, length: fund.characters.count + 2))
aAttributedFundLabel.addAttribute(NSFontAttributeName, value: UIFont(name: "Roboto-Regular", size: 16)!, range: NSRange(location: 8, length: fund.characters.count + 2)) // ERROR POPS UP HERE
startupFund.attributedText = aAttributedFundLabel

这只发生在我整个项目的两个文件中。

我打开了另一个项目,但我能够构建和运行它而没有任何错误,即使我也在那里为多个标签设置了字体。

知道为什么会这样吗?

TIA!

【问题讨论】:

  • 如果您能显示实际代码会有所帮助。
  • 用实际代码编辑问题
  • 酷,感谢您这样做。
  • 也无法重现问题。请复制/粘贴原始代码并指向错误行。
  • 你正在调用一个字符串aAttributedFundLabel? Ada Lovelace 的鬼魂正在惩罚你……

标签: swift xcode7


【解决方案1】:

在其他地方,有人建议你在哪里有这个:

aTitleView.font = UIFont(name: "Roboto-Regular", size: 15)

...你应该尝试这样写:

aTitleView.font = UIFont.init(name: "Roboto-Regular", size: 15)

我对此不以为然(因为我无法重现错误)所以我只是猜测!但是知道它是否真的有效会很有趣。

【讨论】:

  • 哇,太棒了。真正让我感动的是我无法重现这个!我很想亲自体验这个问题。如果您可以可能制作可重现的示例,请向 Apple 提交错误。
  • 一定会做到的! :D
  • 有同样的问题,我在惰性变量实例化中设置它;在没有初始化的情况下在外面做。
  • 这并没有解决我的问题。现在坚持使用 UIFontDescriptor 方法。
  • 只是为了增加混乱,我的应用程序的构建目标一直在工作,但是当我去存档它以发布时......我遇到了这个问题。添加.init( 解决了它。
【解决方案2】:

我也有这个问题。为我解决的问题是关闭整个模块优化。

Bulid 设置 > Swift 编译器 - 代码生成 > 优化级别

我已将其设置为最快(整个模块优化)。当我将它设置为无时,我不再有这个问题了。就上下文而言,这是一个包含 Objective-C 和 Swift 的混合代码库。

【讨论】:

  • 同上。跟我一样。我只能在归档我的项目时产生这个错误。在调试模式下构建+运行没有错误。所以,当然,我查看了我的调试/发布优化并测试了 Fast(WMO) 与 Fast[-O]。这成功了,但出于性能原因,我想保留 WMO,所以我暂时使用UIFont.init(name:
  • UIFont.init对我也不起作用,只好转为单文件优化,诅咒老代码
  • 有什么选项可以同时使用 Fast(WMO) 和 UIFont() 吗?
  • Xcode 很糟糕,严重的是,即使禁用优化它仍然会发生。在我开始使用 Xcode 进行编码之前,我“钦佩”Apple,并且我知道许多非常不同的平台
【解决方案3】:

我遇到了同样的问题,这样做可以让我再次编译:

let descriptor = UIFontDescriptor(name: "OpenSans-Semibold", size: 10.0)
label.font = UIFont(descriptor: descriptor, size: 10.0)

所以,使用 UIFontDescriptor ...

这样做也对我有用:

if let font = UIFont(name: "OpenSans-Semibold", size: 10) {
    label.font = font
}

【讨论】:

  • 感谢zumzum的回复! :)
猜你喜欢
  • 2020-05-19
  • 2011-10-06
  • 2014-11-20
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2014-08-18
相关资源
最近更新 更多