2
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,它不再工作了,我不知道我需要什么才能让它恢复工作。它说有一个额外的论点,但这是不正确的。我相信这与新的可失败初始化程序有关,但我尝试过的一切都不起作用。

4

2 回答 2

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 中似乎就是这种情况),则会退回到系统字体。这样,即使无法加载首选字体,您也可以获得属性字符串。

于 2014-10-22T05:04:39.870 回答
5

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

if let font = UIFont(name: "Voyage", size: 20.0) {
    let timeFont = [NSFontAttributeName:font]
    var attrString3 = NSAttributedString(string: "(Time)", attributes : timeFont)
}
于 2014-10-22T05:06:42.677 回答