NSFontAttributedString在XCode 6.1之前工作

时间:2014-10-22 03:21:24

标签: swift xcode6.1

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,它不再起作用,我无法弄清楚我需要什么让它恢复工作。它说有一个额外的论点,但那不正确。我相信它与新的可用初始化器有关,但我尝试过的所有东西都没有。工作。

2 个答案:

答案 0 :(得分:6)

您的代码无法编译有两个原因:

  • 您现在要使用的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中的情况)。这样,即使无法加载首选字体,也可以获得属性字符串。

答案 1 :(得分:5)

Xcode 6.1附带Swift 1.1,支持可能失败的构造函数。 UIFont初始化可能会失败并返回nil。创建string:时使用NSAttributedString

if let font = UIFont(name: "Voyage", size: 20.0) {
    let timeFont = [NSFontAttributeName:font]
    var attrString3 = NSAttributedString(string: "(Time)", attributes : timeFont)
}