gpt4 book ai didi

ios - 无法在 Swift 中遵循 obj-c 协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 08:54:50 27 4
gpt4 key购买 nike

我正在使用 Swift 创建一个 iOS 应用程序。我发现了一个我想在我的 TableView 中实现的动画,但代码在 Objective-C 中。

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

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

协议(protocol):

@protocol RMPZoomTransitionAnimating <NSObject>

@required

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

@end

我的 Swift 实现:

第一个实现协议(protocol)的类:

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?但没有找到任何帮助

任何线索将不胜感激

最佳答案

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

您可以通过继承 NSObject 或在您的类前面添加 @objc 来获得兼容性。我怀疑这“可能”是您的问题 - 但不幸的是,我目前无法对其进行测试。

您可能还需要添加一些初始化器,例如您的情况下来自 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 兼容的

关于ios - 无法在 Swift 中遵循 obj-c 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com