Ios Swift中UIKit协议的扩展

Ios Swift中UIKit协议的扩展,ios,swift,protocols,Ios,Swift,Protocols,我想在扩展中添加默认实现: import UIKit protocol Animator: UIViewControllerAnimatedTransitioning {} extension Animator { func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.33 }

我想在扩展中添加默认实现:

import UIKit

protocol Animator: UIViewControllerAnimatedTransitioning {}

extension Animator {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.33
    }
}
但我在编译过程中有一个奇怪的错误:

由于信号:分段故障:11,命令失败

和非常长的堆栈转储


我想在扩展中添加默认实现


你不能。Objective-C无法看到Swift协议扩展,因此您的“默认实现”将永远不会被调用。

祝贺您,您使编译器崩溃。(这就是seg故障11的含义。)

Animator类需要从NSObject派生,以便符合UIViewControllerAnimatedTransitioning协议

这项工作:

import UIKit

class Animator: NSObject {

}

extension Animator: UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 0.33
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

    }
}

为什么要扩展此协议以拥有该协议已有的方法?我想为所有确认
Animator
protocol的对象添加默认实现您将无法做到这一点(正如我在回答中所解释的)。它可能会编译,但不会看到或调用实现。我不想扩展类或任何确认协议的对象,我想为所有对象添加实现。这没有意义。为什么字符串或Int需要符合转换协议?你一定是在开玩笑。人们总是用UIViewController扩展来实现这一点。我用两个Swift协议尝试过,但它不太管用。@DanielT。如果你认为我的答案错了,就投反对票!马特是正确的(和往常一样)。有两个问题。1.)Objective-C无法看到swift协议扩展。2.)扩展无法覆盖现有函数。为此,您需要一个子类,而不是扩展。