不能符合Swift

时间:2015-10-24 22:57:06

标签: ios objective-c swift swift2

我正在使用Swift创建iOS应用。我发现了一个我希望在我的表视图中实现的动画,但代码是在Objective-C中。

存储库:https://github.com/recruit-mp/RMPZoomTransitionAnimator

我已成功将Obj-C代码桥接到Swift,但似乎无法符合所需的协议。

协议:

@protocol RMPZoomTransitionAnimating <NSObject>

@required

- (UIImageView *)transitionSourceImageView;
- (UIColor *)transitionSourceBackgroundColor;
- (CGRect)transitionDestinationImageViewFrame;

@end

我的Swift实施:

实现协议的第一个类:

class ChallengeViewController: UIViewController, RMPZoomTransitionAnimating
   func transitionSourceImageView() -> UIImageView {
        return imageView
    }

    func transitionSourceBackgroundColor() -> UIColor {
        return UIColor.whiteColor()
    }

    func transitionDestinationImageViewFrame() -> CGRect {
        return imageView.frame
    }

第二课:

class ChallengeTableViewController: UITableViewController, RMPZoomTransitionAnimating
    func transitionSourceImageView() -> UIImageView {
        return imageForTransition!
    }

    func transitionSourceBackgroundColor() -> UIColor {
        return UIColor.whiteColor()
    }

    func transitionDestinationImageViewFrame() -> CGRect {
        return imageFrame!
    }

在动画制作之前发生的此检查始终失败:

Protocol *animating = @protocol(RMPZoomTransitionAnimating);
    BOOL doesNotConfirmProtocol = ![self.sourceTransition conformsToProtocol:animating] || ![self.destinationTransition conformsToProtocol:animating];

我已阅读此主题How to create class methods that conform to a protocol shared between Swift and Objective-C?,但未找到任何帮助

任何线索都会非常感激

1 个答案:

答案 0 :(得分:0)

Swift类本身不是(默认情况下)Objective-C兼容。

您可以通过继承NSObject或在课堂前添加@objc来获得兼容性。我怀疑这可能&#34;可能&#34;是你的问题 - 但遗憾的是我现在无法对其进行测试。

您可能还需要添加一些初始化程序,例如NSCoder中的一些初始化程序或者其他内容 - 我不幸地回想起我的头脑 - 我无法访问到Xcode现在。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

尝试:

@objc
class ChallengeViewController: UIViewController, RMPZoomTransitionAnimating
   func transitionSourceImageView() -> UIImageView {
        return imageView
    }

    func transitionSourceBackgroundColor() -> UIColor {
        return UIColor.whiteColor()
    }

    func transitionDestinationImageViewFrame() -> CGRect {
        return imageView.frame
    }

这将告诉编译器您的类是与Objective-c兼容的