2016-12-27 2 views
0

Ich mag Standardimplementierung in Erweiterung hinzuzufügen:Erweiterung für UIKit Protokoll in Swift

import UIKit 

protocol Animator: UIViewControllerAnimatedTransitioning {} 

extension Animator { 

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

Aber ich habe einen seltsamen Fehler während der Kompilierung:

Befehl aufgrund Signal fehlgeschlagen: Segmentation fault: 11

und sehr lange Stapel Dump.

+0

Warum Sie dieses Protokoll erweitern, ein Verfahren zu haben, die das Protokoll bereits hat? – matt

+0

Ich möchte Standardimplementierung für alle Objekte hinzufügen, die 'Animator' Protokoll bestätigen –

+1

Sie werden nicht in der Lage sein, das zu tun (wie ich in meiner Antwort erkläre). – matt

Antwort

0

Ich möchte Erweiterung Default-Implementierung hinzufügen

Sie können nicht. Objective-C kann keine Swift-Protokollerweiterung sehen, daher wird Ihre "Standardimplementierung" niemals aufgerufen.

+0

Sie müssen Witze machen. Die Leute machen das ständig mit UIViewController-Erweiterungen. –

+0

Ich habe dies mit zwei Swift-Protokolle, aber es funktioniert auch nicht. –

+0

@DanielT. Wenn du denkst, dass meine Antwort falsch ist, lehne es ab! – matt

0

Glückwunsch, Sie haben den Compiler abgestürzt. (Das ist, was seg fault 11 bedeutet.)

Ihre Animator-Klasse muss von NSObject abgeleitet werden, damit sie dem UIViewControllerAnimatedTransitioning-Protokoll entsprechen kann.

Dies funktioniert:

import UIKit 

class Animator: NSObject { 

} 

extension Animator: UIViewControllerAnimatedTransitioning { 

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

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 

    } 
} 
+0

Es kann _compile_ aber die Implementierungen werden nicht angezeigt oder aufgerufen. – matt

+0

Ich möchte nicht Klasse oder ein Objekt, das Protokoll zu bestätigen, zu erweitern, ich möchte Implementierung für alle Objekte hinzufügen. –

+0

Das ergibt keinen Sinn. Warum sollte ein String oder ein Int dem Übergangsprotokoll entsprechen? –