我學習Swift和我瞭解協議(Swift)類似於接口(Java),但我不知道如何使用協議如接口(偵聽器) 現在如何在Swift中使用它?如何在Java中使用類似偵聽器的方法使用協議
-1
A
回答
0
你需要知道在iOS中沒有動作偵聽器這樣的事情。我們稱他們爲「代表」。
例如,您創建了一個名爲MyView
的視圖,並且用戶可以通過與視圖交互來觸發三個不同的事件。
您想讓控制器知道這些事件何時發生。所以你創建一個MyViewDelegate
。這與MyViewActionListener
類似。
protocol MyViewDelegate {
func event1Occurred()
func event2Occurred()
func event3Occurred()
}
在你MyView
類中,添加一個名爲屬性delegate
:
weak var delegate: MyViewDelegate?
要設置的myView
動作監聽,這是您在MyViewController
創建的MyView
一個實例,首先符合MyViewController
到MyViewDelegate
:
class MyViewController: UIViewController, MyViewDelegate {
}
然後,impleme NT中的方法:
func event1Occurred() {}
func event2Occurred() {}
func event3Occurred() {}
這類似於Java創建一個匿名類:
MyViewActionListener listener = new MyViewActionListener() {
public void onEvent1() {}
public void onEvent2() {}
public void onEvent3() {}
};
,然後分配self
到myView.delegate
:
myView.delegate = self
這就像調用setActionListener
在Java中:
myView.setActionListener(listener);
然而
if (actionListener != null) {
actionListener.onEvent1();
}
,有替代方式迅速做到這一點,比如閉包:
在合適的時間MyView
可以調用這些委託方法:
delegate?.event1Occurred()
這是怎樣的。閉包類似於Java的lambda表達式,它們本質上只是一個方法的接口。
另一種選擇是使用目標選擇器模式。這在Objective-C API中廣泛使用,如UIButton
。
myButton.addTarget(self, selector: #selector(someFunc), for: .touchUpInside)
相關問題
- 1. 在偵聽器方法中使用GC
- 2. 如何在ListView中使用偵聽器方法?
- 3. 如何在另一個類中使用as3 addevent偵聽器調用方法?
- 4. 如何在不同的類中使用動作偵聽器?
- 5. 可以expressjs與nodejs net一起使用來偵聽TCP協議
- 6. 如何在方法參數中使用Raw類型遵守協議方法?
- 7. 任何使Swift中的類符合通用協議的方法?
- 8. Java - 如何使用鼠標偵聽器高亮顯示正方形。 (使用jframe)
- 9. 從位置偵聽器調用方法似乎不起作用!
- 10. 如何使用CompositeItemProcessor註冊偵聽器
- 11. 如果偵聽器與我的Activity不在同一個類中,如何使用asyncTask +位置偵聽器?
- 12. 在類方法中使用事件偵聽器來調用另一個返回undefined的類方法
- 13. 無法使用單獨的方法停止偵聽器
- 14. 如何使用鼠標偵聽器來調用另一個類?
- 15. 如何使用按鍵偵聽器調用類?
- 16. 使用java偵聽器模式的Scala語法糖
- 17. 如何以正確的方式使用鼠標偵聽器?
- 18. 使用Spring JMS時未調用偵聽器方法
- 19. 如何在另一個類中調用協議方法
- 20. 在另一個通用協議類型中使用通用協議類型
- 21. 如何在python中使用libtorrent的udp協議跟蹤器協議
- 22. 在協議子類中使用twisted.internet.reactor
- 23. 如何在「mailto」協議中使用unicode?
- 24. 如何在C中使用FTP協議?
- 25. 如何在uiviewcontroller中使用協議,swift
- 26. 如何在協議中使用array.indexOf?
- 27. 如何在ios中使用RTP協議
- 28. 如何使用java獲取DOM事件偵聽器
- 29. 如何使用@WebListener部署java EE偵聽器
- 30. 如何使用java創建Activemq http偵聽器
參考https://stackoverflow.com/questions/27371194/set-action-listener-programmatically-in-swift – Akshay
在大多數情況下,你不會的。你只需要使用閉包。 (爪哇的lambda的是這些更受限制的版本) – Alexander
[希望這會幫助你](https://www.youtube.com/watch?v=DBWu6TnhLeY) – Sandu