2014-10-22 68 views
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之前工作过的工作,但现在我已经升级到6.1的Xcode它不工作了,我想不出什么,我需要把它找回来工作。它说有一个额外的论点,但这是不正确的。我相信它与新的可分解的初始化器有关,但我尝试过的所有内容都不起作用。NSFontAttributedString的XCode 6.1

回答

5

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

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

谢谢,工作! – JTerry 2014-10-22 12:22:36

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