2014-09-05 21 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. 構建