【问题标题】:NSFontAttributeName vs NSAttributedStringKey.fontNSFontAttributeName 与 NSAttributedStringKey.font
【发布时间】:2020-11-06 18:59:58
【问题描述】:

我在使用一段时间的库中遇到 Swift 代码问题。 这似乎与某种版本冲突有关,但我不确定。

代码如下:

let attribMsg = NSAttributedString(string: msg,
                               attributes: [NSAttributedStringKey.font:UIFont.systemFont(ofSize: 23.0)])

这是我从编译器得到的错误信息:

Type 'NSAttributedStringKey' (aka 'NSString') has no member 'font'
    Did you mean 'zone'?  Fix(button)

在不同的项目中使用此代码,我注意到其中一些我没有收到错误消息,并且全部编译没有任何问题。

我还注意到,如果我将上面的代码替换为以下代码:

let attribMsg = NSAttributedString(string: msg,
                               attributes: [NSFontAttributeName:UIFont.systemFont(ofSize: 23.0)])

有问题的项目将运行,而其他项目(以前的工作)显示其他消息:

'NSFontAttributeName' has been renamed to 'NSAttributedStringKey.font'

换句话说,一些项目使用一种类型的代码,而另一些项目使用另一种类型。

不用说,我不想每次从一个项目切换到另一个项目时都更改代码。

我所做的更改项目部署目标的实验似乎并没有太大的不同。 所以我的问题来了:处理这个问题的方法是什么?

【问题讨论】:

  • 项目是否使用不同版本的 Swift? (斯威夫特 3 与斯威夫特 4)
  • 在 Swift 4 中,键已重命名为 NSAttributedStringKey.font,如果 swift 3 使用字符串键,请在构建设置中检查 swift 版本
  • 是的。你问对了问题。就是这样,我从 3.2 更改为 4.0。有用。如果这是一个答案而不是评论,我会接受它!谢谢。

标签: ios swift3


【解决方案1】:

这些项目可能使用不同版本的 Swift。

在 Swift 4 中,NSFontAttributeName 已替换为 NSAttributedStringKey.font

在 Swift 5 中,NSFontAttributeName 已替换为 NSAttributedString.Key.font

【讨论】:

    【解决方案2】:

    Swift 4.2

    NSAttributedStringKey 更名为 NSAttributedString.Key。但是对于这个特定问题,您需要获取原始值,因此解决方案将是 NSAttributedString.Key.font.rawValue

    请看这里以获得深入的解释: https://stackoverflow.com/a/46459315/2440997

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多