无法使用类型'的参数列表调用'subscript'(字符串:NSString,attributes:[NSString:UIFont?])

时间:2014-11-26 07:33:11

标签: ios xcode swift

我有以下代码但是当我编译时我得到了这个错误:

  

"无法调用'下标'使用类型'的参数列表(字符串:NSString,属性:[NSString:UIFont?])"。

此代码在 xCode 6.0.1 上正常运行,但在升级到 6.1 之后,它会出现此错误。

let textboldFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Bold", size: 15.0)] 
let textregularFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Regular", size: 15.0)]
let para = NSMutableAttributedString()
let attributedstring1 = NSAttributedString(string: dateArray[1] as NSString, attributes:textboldFont)

1 个答案:

答案 0 :(得分:1)

不幸的是,来自Swift的错误消息有时并不真正有用。问题不是下标,而是属性数组。

正如您在标题中看到的那样,您使用的UIFont初始化程序返回一个可选的UIFont:

init?(name fontName: String, size fontSize: CGFloat) -> UIFont

NSAttributedString初始化程序需要一个[NSObject : AnyObject]数组。请注意AnyObject,它不是AnyObject?。所以你必须先打开UIFont

您有两种选择:

安全的方式。检查是否可以创建这些UIF字符,否则使用系统提供的字体:

let textboldFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Bold", size: 15.0) ?? UIFont.boldSystemFontOfSize(15.0)]
let textregularFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Regular", size: 15.0) ?? UIFont.systemFontOfSize(15.0)]

危险的方式。强制打开可选字体。如果无法创建字体,则会崩溃:

let textboldFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Bold", size: 15.0)!]
let textregularFont = [NSFontAttributeName:UIFont(name: "ProximaNova-Regular", size: 15.0)!]