以下这段代码在Xcode 6 beta 5中运行良好:
func fitText(){
let size = (self.text as NSString).sizeWithAttributes([NSFontAttributeName:self.font]) //Errors here
self.frame.size = size
}
现在它在第二行显示以下错误:
' UIFont'不是&NSCictionary'
的子类型无法转换表达式' $ T6'输入' UIFont'
当我把它分成
时let dict = [NSFontAttributeName:self.font]
let size = (self.text as NSString).sizeWithAttributes(dict) //Even stranger errors go here
xcode说:
' UIFont'不是&NSCictionary'
的子类型无法转换表达式' [NSString:UIFont]'输入' CGSize'
在测试版7或6中swift改变了什么,它打破了代码?
答案 0 :(得分:6)
通过将隐式展开的选项转换为显式选项,在beta 7中修复了几个带有可选和可选属性的方法签名。
在您的情况下,我假设text
属性被声明为String!
(隐式展开),而现在它是String?
。因此,您必须隐式地打开它:
let size = self.text!.sizeWithAttributes(dict)
使用可选绑定或更好:
if let text = self.text {
let size = text.sizeWithAttributes(dict)
}
答案 1 :(得分:0)
您的fitText
功能对我来说很合适。
如果它有帮助,我在安装它后第一次运行新版本的Xcode6-beta时,通常会做以下几件事: