一个WWDC 2015年会议的视频介绍的想法面向协议编程,我想通过我的未来应用这种技术.在过去的几天里,我一直在玩Swift 2.0,以便了解这种新方法,并坚持尝试使用Delegate Pattern.
我有两个协议定义了我项目中有趣部分的基本结构(示例代码是无意义但描述了问题):
1)一个委托协议,它使一些信息可访问,类似于UITableViewController的dataSource协议:
protocol ValueProvider {
var value: Int { get }
}
Run Code Online (Sandbox Code Playgroud)
2)实体的接口协议,它使用上面的信息(这里是"协议优先"方法的想法发挥作用):
protocol DataProcessor {
var provider: ValueProvider { get }
func process() -> Int
}
Run Code Online (Sandbox Code Playgroud)
关于数据处理器的实际实现,我现在可以在枚举,结构和类之间进行选择.我希望如何处理信息有几种不同的抽象级别,因此类似乎最适合(但我不想让这个最终决定,因为它可能在将来的用例中改变).我可以定义一个基本处理器类,在此基础上我可以构建几个特定于案例的处理器(结构和枚举不可能):
class BaseDataProcessor: DataProcessor {
let provider: ValueProvider
init(provider: ValueProvider) {
self.provider = provider
}
func process() -> Int {
return provider.value + 100
}
}
class SpecificDataProcessor: BaseDataProcessor {
override func process() -> Int {
return …Run Code Online (Sandbox Code Playgroud) 我的Flutter应用程序具有以下一般结构:
我正在使用FireStore.该列表是使用Stream<QuerySnapshots>,当用户点击一个项目时,应用程序的路由器解析路由名称(例如/contacts/123),创建相应的DocumentReference并将其转发到详细信息屏幕的初始化程序,然后初始化程序DocumentReference.get用于加载详细信息并DocumentReference.updateData保存更改.工作精美 - 但只是一个概念的证明.
现在我想隐藏FireStore以及BLoC背后的剩余业务逻辑.这导致了一些问题:
streamOfContact(contact) -> Stream<Contact>禁止在BLoC(类似的东西)上使用函数,那么我如何用Sinks做到这一点?或者通常有不同的方法来做到这一点而不破坏BLoC模式?我对这一切都很陌生,所以很可能我忽略了一些重要的东西.我在网上找到的教程只处理根数据(例如将购物车项目添加到购物车,处理用户身份验证,......),但我还没有看到展示嵌套数据的示例.任何帮助都非常感谢!
我有一个BLoC,它使用原始输入Stream(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer。UI将显示该列表。用户可以应用过滤器(本身是流到BLoC中的流),以便BLoC用相应的where(...)语句更新输入流转换器。
问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以便转换器有机会将其拾取。如何正确完成?一个例子会很有帮助!