2016-12-27 12 views
0

Я хочу добавить реализацию по умолчанию в расширении:расширения для протокола UIKit в Swift

import UIKit 

protocol Animator: UIViewControllerAnimatedTransitioning {} 

extension Animator { 

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

Но у меня есть странная ошибка во время компиляции:

Сбой команды из-за сигнала: ошибка сегментирования: 11

и очень длинный свалка.

+0

Почему вы расширить этот протокол, чтобы иметь метод, что протокол уже есть? – matt

+0

Я хочу добавить реализацию по умолчанию для всех объектов, которые подтверждают протокол 'Animator' –

+1

Вы не сможете это сделать (как я объясню в своем ответе). – matt

ответ

0

Я хочу добавить реализацию по умолчанию в расширении

Вы не можете. Objective-C не может видеть расширение протокола Swift, поэтому ваша «реализация по умолчанию» никогда не будет вызвана.

+0

Вы должны шутить. Люди делают это все время с расширениями UIViewController. –

+0

У меня есть это с двумя протоколами Swift, но это тоже не работает. –

+0

@ DanielT. Если вы считаете, что мой ответ неправильный, опустите его! – matt

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) { 

    } 
} 
+0

Это может _compile_, но реализация не будет видна или вызвана. – matt

+0

Я не хочу расширять класс или любой объект, который подтверждает протокол, я хочу добавить реализацию для всех объектов. –

+0

Это не имеет смысла. Почему String или Int должны соответствовать протоколу перехода? –