iOS Swift如何创建一个协议实例。

4

我是一名Android开发者,对于Swift还很陌生,请多多包涵。我正在尝试使用Swift中的协议实现回调函数。在Java中,我可以创建一个接口并将其实例化,而不将其链接到任何实现类,以便我可以传递它。例如:

public interface SomeListener {
    void done(); 
}

SomeListener listener = new SomeListener() {
    @Override
    public void done() {
        // do something
    }
}
listener.done();

如何使用Swift中的协议来完成这个任务?或者说,它真的能够完成吗?

不,这是不可能的。你需要一个具体的实现类或结构体。 - Antonio
这可能会对你有所帮助:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html - Yuyutsu
1个回答

13

这是一种你可以实现协议的方式。就像 ObjC 中的委托模式。

protocol DoneProtocol {
    func done()
}

class SomeClass {
    var delegate:DoneProtocol?

    func someFunction() {
        let a = 5 + 3
        delegate?.done()
    }
}

class Listener : DoneProtocol {
   let someClass = SomeClass()

   init() {
       someClass.delegate = self
       someClass.someFunction()
   }
   // will be called after someFunction() is ready
   func done() {
       println("Done")
   }
}

刚刚做了一些研究,所以显然Swift还没有匿名类行为,我想这是唯一的方法,谢谢! - Guster
Java主要使用匿名类来绕过语言不支持闭包(即内联匿名函数)的限制。由于Swift支持闭包,因此匿名类的需求大大降低,而且语法也更加简洁。 - David Berry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接