2016-04-07 3 views
0

Могу ли я создать экземпляр протокола в swift?Быстрый экземпляр протокола

Как в java экземпляр интерфейса?

Java:

public interface test { 
    void test(); 
} 

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

Swift:

protocol ITransmitter { 
    func onExecuteSuccess(data:String) 
} 

//instance??? 
+0

хорошо мы можем сделать что-то вроде этого вар callHandler: CallsHanlerProtocol = CallHandler() –

ответ

4

Вы не можете создать экземпляр протокола.

Например

protocol ITransmitter { 
    func onExecuteSuccess(data:String) 
} 

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

Но тем не менее вы можете обратиться объект в вашем коде, используя протокол в качестве единственного типа. Скажем, у вас есть класс, который соответствует этому протоколу, но в вашем коде ваше требование состоит только в том, чтобы иметь возможность называть метод протокола на нем, и вам все равно, какие другие методы поддерживает экземпляр класса.

Для ПРИМЕР-

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

Я создал внутренний класс, который соответствует протоколу и назначен объект этого класса

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?

Смежные вопросы