2016-08-17 5 views
1

Nach 6 bis 8 Xcode Beta aktualisieren, erhalte ich folgende Fehlermeldung:mehrdeutige Fehler in Xcode 8 beta 6

Value of type 'Any' has no member 'cgRectValue'

auf dem folgenden Block:

var tmpContentViewFrameOrigin: CGPoint? 
var tmpCircleViewFrameOrigin: CGPoint? 
var keyboardHasBeenShown:Bool = false 

func keyboardWillShow(_ notification: Notification) { 
    keyboardHasBeenShown = true 
    if let userInfo = (notification as NSNotification).userInfo { 
     if let beginKeyBoardFrame = userInfo[UIKeyboardFrameBeginUserInfoKey]!.cgRectValue.origin.y { 
      if let endKeyBoardFrame = userInfo[UIKeyboardFrameEndUserInfoKey]?.cgRectValue.origin.y { 
       tmpContentViewFrameOrigin = self.contentView.frame.origin 
       tmpCircleViewFrameOrigin = self.circleBG.frame.origin 
       let newContentViewFrameY = beginKeyBoardFrame - endKeyBoardFrame - self.contentView.frame.origin.y 
       let newBallViewFrameY = self.circleBG.frame.origin.y - newContentViewFrameY 
       self.contentView.frame.origin.y -= newContentViewFrameY 
       self.circleBG.frame.origin.y = newBallViewFrameY 
      } 
     } 
    } 
} 

und diese beiden Linien speziell :

if let beginKeyBoardFrame = userInfo[UIKeyboardFrameBeginUserInfoKey]!.cgRectValue.origin.y { 
    if let endKeyBoardFrame = userInfo[UIKeyboardFrameEndUserInfoKey]?.cgRectValue.origin.y { 

Ich vermisse vielleicht etwas so einfach ... irgendwelche Vorschläge?

Antwort

0

cgRectValue ist eine Eigenschaft der Klasse NSValue. Was Sie aus dem userInfo Wörterbuch erhalten, ist nicht bekannt, ein NSValue zu sein, so dass Sie NSValue Eigenschaften darauf nicht zugreifen können.

Für den Compiler Sie verwenden, um diese Eigenschaften zu lassen, müssen Sie es wissen lassen, dass Sie diesen Wert erwarten ein zu NSValue:

if let beginKeyBoardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.origin.y { 

(Dies Compiler-Fehler führen nicht vor, weil Wörterbücher importierte Cocoa-APIs überbrückt mit einem Wertetyp von AnyObject. AnyObject hat einige Magie wie der ObjC id-Typ, in dem der Compiler lassen Sie jede Methode/Eigenschaft auf sie aufrufen-mit dem Ergebnis in eine Optional verpackt, weil es möglicherweise nicht existiert dass Wörterbücher Any als ihren Werttyp haben, müssen Sie explizit sagen, was Sie den Wert erwarten e Typ zu sein.)

+0

wow, das macht Sinn. Ich habe den userInfo-Teil des neuen Dokuments durchgesehen, konnte aber nichts erkennen, was darauf hindeutet. Danke jedenfalls! –

Verwandte Themen