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.)扩展无法覆盖现有函数。为此,您需要一个子类,而不是扩展。