2016-04-07 4 views
0

Kann ich eine Instanz eines Protokolls in swift erstellen?Schnelle Instanz des Protokolls

Wie in Java eine Instanz einer Schnittstelle?

Java:

public interface test { 
    void test(); 
} 

new test() { 
    @Override 
    public void test() { 
     //... 
    } 
} 

Swift:

protocol ITransmitter { 
    func onExecuteSuccess(data:String) 
} 

//instance??? 
+0

gut wir etwas wie das var callHandler tun können: CallsHanlerProtocol = CallHandler() –

Antwort

4

Sie können keine Instanz Protokoll erstellen.

Zum Beispiel

protocol ITransmitter { 
    func onExecuteSuccess(data:String) 
} 

var protocolInstance : ITransmitter = ITransmitter() // << Not allowed. This is an error 

Aber wie Sie ein Objekt in Ihrem Code-Protokoll als einzige Art beziehen können. Nehmen wir an, Sie haben eine Klasse, die diesem Protokoll entspricht, aber in Ihrem Code besteht Ihre Anforderung nur darin, die Protokollmethode darauf aufrufen zu können, und Sie interessieren sich nicht für andere Methoden, die die Instanz der Klasse unterstützt.

Für Beispiel-

class A{ 
    func foo(){ 

    } 
} 
extension A : ITransmitter{ 

func onExecuteSuccess(data:String){ 
    //Do stuff here 
    } 
} 

//This function wants to run the ITransmitter objects, so it uses only protocol //type for its argument. The transmitter can be of any class/struct, but has to //conform to ITransmitter protocol 

func runTransmittor(transmitter : ITransmitter){ 
    //some other statements here.. 
    transmitter. onExecuteSuccess(data :SomeData){ 
    } 
} 
0

habe ich innere Klasse, die zu Protokoll entspricht und zugewiesen Objekt dieser Klasse

class Outer { 
    private final class Inner: ITransmitter { 
     unowned let parent: Outer 
     init(parent: Outer) { 
      self.parent = parent 
     } 
     func onExecuteSuccess(data:String){ 
     } 
    } 
    var inner: Inner! = nil 
    init() { 
     inner = Inner(parent: self) 
    } 
} 

Do Swift inner classes have access to self of outer class?

Verwandte Themen