Swift beta7中的NSString.sizeWithAttributes()

时间:2014-09-05 13:39:58

标签: swift nsstring ios8 xcode6 xcode6-beta7

以下这段代码在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改变了什么,它打破了代码?

2 个答案:

答案 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时,通常会做以下几件事:

  1. 在Xcode>下仔细检查;偏好>选择最新命令行工具的位置
  2. 删除build和DerivedData文件夹
  3. 重启Xcode
  4. 构建