In iOS 11 (Xcode 9 Beta 5), ich bin UIDynamicAnimator der items(in:)
Methode aufrufen und sofort Absturz:UIDynamicAnimator Artikel (in :) Abstürze in iOS 11
NSArray Element konnte das Swift Array Elementtyp entsprechen
Was ist los?
In iOS 11 (Xcode 9 Beta 5), ich bin UIDynamicAnimator der items(in:)
Methode aufrufen und sofort Absturz:UIDynamicAnimator Artikel (in :) Abstürze in iOS 11
NSArray Element konnte das Swift Array Elementtyp entsprechen
Was ist los?
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.