2017-08-19 8 views

Antwort

2

Sie haben einen Fehler gefunden. (Filed mit Apple, Radar 33979954.) Hoffentlich wird es bald behoben werden, aber bis dahin, hier ist das Update:

extension UIDynamicAnimator { 
    func views(in rect: CGRect) -> [UIView] { 
     let nsitems = self.items(in: rect) as NSArray 
     return nsitems.flatMap{$0 as? UIView} 
    } 
} 

Rufen Sie nun view(in:) statt items(in:), und alles wird gut.

Das Problem besteht darin, dass störende Objekte aus dem Array items(in:) setzen in zurückgegeben werden. Wegen dieser unechten Objekte kann das Array die Brücke von Objective-C nach Swift nicht überqueren; Das zurückgegebene Array wird in Swift als [UIDynamicItem] eingegeben, aber das Array enthält Objekte, die keine UIDynamicItem-Objekte sind.

Die Erweiterung funktioniert, indem sie die Brücke nicht überquert. Wir bleiben in der NSArray Objective-C-Welt, filtern die unechten Objekte aus und dann über die Brücke.