NSFontAttributedString 在 XCode 6.1 之前工作
Posted
技术标签:
【中文标题】NSFontAttributedString 在 XCode 6.1 之前工作【英文标题】:NSFontAttributedString worked before XCode 6.1 【发布时间】:2014-10-22 03:21:24 【问题描述】:let timeFont = [NSFontAttributeName:UIFont(name: "Voyage", size: 20.0)]
var attrString3 = NSAttributedString("(Time)", attributes : timeFont); // <--- compiler error "Extra argument in call"
此代码在 xcode 6.0 中工作,但现在我已升级到 xcode 6.1,它不再工作,我无法弄清楚我需要什么才能让它恢复工作。它说有一个额外的论点,但这是不正确的。我相信这与新的可失败初始化程序有关,但我尝试过的一切都不起作用。
【问题讨论】:
【参考方案1】:您的代码无法编译有两个原因:
您现在要使用的NSAttributedString
的初始化程序需要显式标记 string
参数
您现在使用的 UIFont
初始值设定项返回一个可选值(即 UIFont?
),在将其传递到属性字典之前需要对其进行解包。
试试这个:
let font = UIFont(name: "Voyage", size: 20.0) ?? UIFont.systemFontOfSize(20.0)
let attrs = [NSFontAttributeName : font]
var attrString3 = NSAttributedString(string: "(Time)", attributes: attrs)
注意使用新的合并运算符 ??
。这会展开可选的 Voyage 字体,但如果 Voyage 不可用(在 Playground 中似乎就是这种情况),则会退回到系统字体。这样,即使您的首选字体无法加载,您也可以获得属性字符串。
【讨论】:
【参考方案2】:Xcode 6.1 附带支持可能失败的构造函数的 Swift 1.1。 UIFont
初始化可能失败并返回 nil
。在创建NSAttributedString
时也要使用string:
:
if let font = UIFont(name: "Voyage", size: 20.0)
let timeFont = [NSFontAttributeName:font]
var attrString3 = NSAttributedString(string: "(Time)", attributes : timeFont)
【讨论】:
以上是关于NSFontAttributedString 在 XCode 6.1 之前工作的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记