将@interface UIView 从 Objective-C 翻译成 Swift
Translating @interface UIView from Objective-C to Swift
我正在学习如何使用 UIKit Dynamics 制作菜单动画的 Objective-C 教程,但我在将以下代码从 Objective-C 转换为 Swift 时遇到了一些问题。
animator.h
@interface Animator : NSObject
+ (instancetype)animatorWithScreen:(UIScreen *)screen;
- (void)addAnimation:(id<Animation>)animatable;
- (void)removeAnimation:(id<Animation>)animatable;
@end
@interface UIView (AnimatorAdditions)
- (Animator *)animator;
@end
animator.m
@implementation Animator
{
}
+ (instancetype)animatorWithScreen:(UIScreen *)screen
{
if (!screen) {
screen = [UIScreen mainScreen];
}
Animator *driver = objc_getAssociatedObject(screen, &ScreenAnimationDriverKey);
if (!driver) {
driver = [[self alloc] initWithScreen:screen];
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return driver;
}
@implementation UIView (AnimatorAdditions)
- (Animator *)animator
{
return [Animator animatorWithScreen:self.window.screen];
}
@end
我能够让其他一切正常工作,但我不确定如何让 UIView 使用 Swift 让动画师 属性 以及如何正确翻译:
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
swift 已经有关于 objc_setAssociatedObject
的讨论:"Is there a way to set associated objects in Swift?"。
您尝试使用 Animator
进行的操作称为 扩展 。这当然也适用于 swift - 看看 the docs 如何自己创建一个。
我正在学习如何使用 UIKit Dynamics 制作菜单动画的 Objective-C 教程,但我在将以下代码从 Objective-C 转换为 Swift 时遇到了一些问题。
animator.h
@interface Animator : NSObject
+ (instancetype)animatorWithScreen:(UIScreen *)screen;
- (void)addAnimation:(id<Animation>)animatable;
- (void)removeAnimation:(id<Animation>)animatable;
@end
@interface UIView (AnimatorAdditions)
- (Animator *)animator;
@end
animator.m
@implementation Animator
{
}
+ (instancetype)animatorWithScreen:(UIScreen *)screen
{
if (!screen) {
screen = [UIScreen mainScreen];
}
Animator *driver = objc_getAssociatedObject(screen, &ScreenAnimationDriverKey);
if (!driver) {
driver = [[self alloc] initWithScreen:screen];
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return driver;
}
@implementation UIView (AnimatorAdditions)
- (Animator *)animator
{
return [Animator animatorWithScreen:self.window.screen];
}
@end
我能够让其他一切正常工作,但我不确定如何让 UIView 使用 Swift 让动画师 属性 以及如何正确翻译:
objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
swift 已经有关于 objc_setAssociatedObject
的讨论:"Is there a way to set associated objects in Swift?"。
您尝试使用 Animator
进行的操作称为 扩展 。这当然也适用于 swift - 看看 the docs 如何自己创建一个。