上下文
Parent
是视图控制器,显示用户订阅的频道列表
Child
是显示频道对话的视图控制器。用户进入它以发送消息。
目前,我Parent
符合TwilioChatClientDelegate
,这为我提供了chatClient(synchronizationStatusChanged)
功能。我需要通过调用以下内容来提取频道列表:
func chatClient(_ client: TwilioChatClient!, synchronizationStatusChanged status: TCHClientSynchronizationStatus) {
if status == .completed {
client.channelsList().publicChannels(completion: { (result, paginator) in
guard let result = result,
let paginator = paginator else {
print ("Error fetching channels")
return
}
if (result.isSuccessful()) {
for channel in paginator.items() {
print("Channel: \(channel.friendlyName)")
}
print ("done channeling")
}
})
因此,我也在这里初始化TwilioChatClient
。
问题:
我的困惑之源是:我还需要Child
符合TwilioChatClientDelegate
,因为我需要它来订阅所有正在发送的消息通过函数chatClient(messageAdded)
让Parent
和Child
订阅委托显然是很多开销和次优。但是,仅仅让Parent
成为委托会引发如何让Child
在该频道内接收必要消息的问题。
对此的任何指导都将非常感激。
答案 0 :(得分:1)
我会通过创建一个专门的类来解决这个问题,比如TwilioChatManager
- 它的目的是管理与Twilio相关的所有内容,以便从视图控制器卸载此代码。该类还符合TwilioChatClientDelegate
和TwilioClient
代表。然后我会添加两个自定义协议,一个包含Parent
所需的方法,另一个包含Child
所需的协议。管理员将拥有两个委托属性,并将从Twilio委派给其各自的代表 - 这里有机会对数据进行一些预处理,并且明确地传达了需要的内容。