Swift中UIKit协议的扩展

时间:2016-12-27 03:00:37

标签: ios swift protocols

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

import UIKit

protocol Animator: UIViewControllerAnimatedTransitioning {}

extension Animator {

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

但编译时我遇到一个奇怪的错误:

  

命令因信号失败:分段错误:11

和非常长的堆栈转储。

2 个答案:

答案 0 :(得分:0)

  

我想在扩展程序

中添加默认实现

你不能。 Objective-C无法看到Swift协议扩展,所以你的默认实现"永远不会被召唤。

答案 1 :(得分:0)

恭喜,你崩溃了编译器。 (这就是故障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) {

    }
}