2014-09-05 44 views
3

这段代码波纹管用于在Xcode很好地工作6的β5:NSString.sizeWithAttributes()在夫特联蛋白β7

func fitText(){ 
    let size = (self.text as NSString).sizeWithAttributes([NSFontAttributeName:self.font]) //Errors here 
    self.frame.size = size 
} 

现在它给在第二行以下错误:

“UIFont”不是“的NSDictionary”

不能转换表达式的类型'$ T6为键入“UIFont”

亚型

当我把它分成

let dict = [NSFontAttributeName:self.font] 
let size = (self.text as NSString).sizeWithAttributes(dict) //Even stranger errors go here 

Xcode中说:

'UIFont' 不是 '的NSDictionary'

不能转换表达式的类型 '[的NSString:UIFont]' 亚型键入'CGSize'

在测试版7或6中,swift发生了什么变化,它会破坏代码?

回答

6

通过将隐式展开的选项转换为显式选项,已在beta 7中修复了具有可选属性和可选属性的几个方法签名。

在你的情况,我认为text属性被宣布为String!(隐式解包),而现在它是一个String?而不是。因此,你要解开它,无论是含蓄:

let size = self.text!.sizeWithAttributes(dict) 

或更好的使用可选的结合:

if let text = self.text { 
     let size = text.sizeWithAttributes(dict) 
    } 
+0

解缠米它的工作。任何想法虽然这些乱码错误信息是什么? – Hristo 2014-09-05 13:59:48

+0

呃... swift错误信息从来没有用来找出问题所在。例如,它发生它说一个类不符合协议,但它确实,或者一个类没有某个特定的属性等等。我认为仍然有很多工作仍然留在这个主题上,我希望会尽快解决。 – Antonio 2014-09-05 14:04:15

+1

作为一般规则,当错误信息没有任何意义时,则错误地使用其他的东西 - 但在某些情况下,它是关于可选项。但它也可以是没有@obj属性的协议,通过引用其他属性初始化的类属性,桥接类中泛型的用法等。 – Antonio 2014-09-05 14:08:16

0

fitText功能工作得很好,对我来说。

万一有帮助,这里有几件事情,当我运行Xcode6-β的首次新版本我通常在安装后:

  1. 下的Xcode>首选项仔细检查>地点是最新的命令行工具选择
  2. 删除构建和DerivedData文件夹
  3. 重新启动的Xcode
  4. 构建