3

下面这段代码在 Xcode 6 beta 5 中运行良好:

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”

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

4

2 回答 2

6

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

在您的情况下,我假设该text属性被声明为String!(隐式展开),而现在它是 a String?。因此,您必须以隐式方式打开它:

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

或更好地使用可选绑定:

    if let text = self.text {
        let size = text.sizeWithAttributes(dict)
    }
于 2014-09-05T13:47:07.183 回答
0

你的fitText功能对我来说很好。

如果它有帮助,以下是我在安装新版本的 Xcode6-beta 后第一次运行时通常会做的一些事情:

  1. 在 Xcode > Preferences > Location 下仔细检查是否选择了最新的命令行工具
  2. 删除 build 和 DerivedData 文件夹
  3. 重启 Xcode
  4. 建造
于 2014-09-05T13:49:22.460 回答