NSFontAttributeName vs NSAttributedStringKey.font

时间:2017-10-27 02:38:34

标签: ios swift3

我在使用一段时间的库中使用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)

enter image description here

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

我还注意到如果我用以下内容替换上面的代码:

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

有问题的项目会有效,而其他项目(以前有效)会显示另一条消息:

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

enter image description here

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

毋庸置疑,每次我从一个项目切换到另一个项目时,我都不想更改代码。

我改变项目的部署目标的实验似乎没有太大的区别。 我的问题就出现了:处理此问题的方法是什么?

2 个答案:

答案 0 :(得分:30)

项目可能是不同版本的Swift。

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

答案 1 :(得分:3)

Swift 4.2

NSAttributedStringKey重命名为NSAttributedString.Key。但是,对于此特定问题,您需要获取原始值,以便解决方案为NSAttributedString.Key.font.rawValue

看看这里有一个深入的解释: https://stackoverflow.com/a/46459315/2440997