2015-11-02 46 views
0

這是我的代碼段:鑄造在斯威夫特工作不正常

if let newValue = change?[NSKeyValueChangeNewKey] { 
    print("\(newValue)") 
    faceBounds = newValue as? CGRect 
    print("\(faceBounds)" + " in controller") 
    dispatch_async(dispatch_get_main_queue(),{() -> Void in self.updateFaceRectView()}) 
} 

其中「faceBounds」是的CGRect?類型。

然而,這是從我得到的系統輸出:

的NSRect:{{116.24999,337.49997},{86.249992,86.249992}}

在控制器零

發生什麼事?爲什麼不是「faceBounds」獲得正確的價值?


[更新]

想這也

if let newValue = change?[NSKeyValueChangeNewKey] { 
    var str: String? 
    str = newValue as? String 
    print("\(str)") 
    // Still prints nil 
} 

是我用錯了鑄造知識?

而btw如果有人想知道,newValueAnyObject類型。

+0

是您的'newValue'曾經分配? – Superian007

+0

newValue如上所示打印出來 –

+0

'CGRect'和'NSRect'是等價的。這個鑄造在Objective C中正常工作。我沒有在Swift中進行測試。但你可以嘗試從'NSRect'手動創建'CGRect'對象。 – t4nhpt

回答

0

OK,我已經找到了解決方法 「現在」:

faceBounds = newChange.CGRectValue 

這解決了問題,而不是鑄造的。如果任何人有更多的「鑄造」的方式,請隨時張貼您的答案。

0

作爲寫入documentation

AnyObject可以表示任何類型的一個實例。

一個的NSRect(和的CGRect)的結構類型不是類類型,因此它們與AnyObject兼容,因此newValue as? CGRect將無法​​正常工作。您可以先嚐試將鑄件鑄造成Any,然後嘗試向下鑄造至CGRect

let newValue = change?[NSKeyValueChangeNewKey] as! Any 
faceBounds = newValue as? CGRect 
+0

nope仍然不工作:( –

0

您可以使用基金會的NSRectToCGRect()

if let newValue = change?[NSKeyValueChangeNewKey] { 
    print("\(newValue)") 
    faceBounds = NSRectToCGRect(newValue) 
    print("\(faceBounds)" + " in controller") 
    dispatch_async(dispatch_get_main_queue(),{() -> Void in self.updateFaceRectView()}) 
}