【问题标题】:Translating @interface UIView from Objective-C to Swift将 @interface UIView 从 Objective-C 转换为 Swift
【发布时间】:2015-06-28 19:00:38
【问题描述】:

我正在关注如何使用 UIKit Dynamics 为菜单设置动画的 Objective-C 教程,但在将以下代码从 Objective-C 转换为 Swift 时遇到了一些问题。

动画师.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

动画师.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

我能够让其他一切正常工作,但我不确定如何使用 Swift 让 UIView 拥有 animator 属性以及如何正确翻译:

objc_setAssociatedObject(screen, &ScreenAnimationDriverKey, driver, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

【问题讨论】:

标签: ios objective-c swift uiview uikit-dynamics


【解决方案1】:

已经有一个关于objc_setAssociatedObject for swift 的讨论:"Is there a way to set associated objects in Swift?"。

您尝试对Animator 执行的操作称为扩展。当然,这也适用于 swift - 请查看 the docs 了解如何自己创建一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2018-04-08
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多