【问题标题】:iOS Swift How to create a Protocol instanceiOS Swift 如何创建协议实例
【发布时间】:2014-12-23 08:55:10
【问题描述】:

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

public interface SomeListener {
    void done(); 
}

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

如何使用 Swift 中的协议来做到这一点?还是真的可以做到?

【问题讨论】:

标签: ios objective-c iphone xcode swift


【解决方案1】:

这是实现协议的一种方式。它类似于 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 还没有匿名类行为,我想这是唯一的方法,谢谢!
  • @gricher Java 使用匿名类主要是为了绕过该语言不支持闭包这一事实(想想内联匿名函数)由于 Swift 确实支持闭包,因此对匿名类的需求要少得多,并且除此之外,语法最终变得更加简洁。
猜你喜欢
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
相关资源
最近更新 更多