区块链技术博客
www.b2bchain.cn

SwiftUI + Redux求职学习资料

D0b2wT.gif

本文介绍了SwiftUI + Redux求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

看完本章你将可以得到:

  • Redux的核心概念
  • 理解何时使用Redux架构
  • 手动实现简化的Redux架构

一、什么是Redux?

Redux和众所周知的MVC一样是一种App的架构,用来组织状态,UI以及业务逻辑。Redux通过状态中心(Store)来管理状态。状态一旦变化,使用到该状态的UI组件会及时收到通知,从而更新UI。用户点击按钮,会向状态中心发出一个Action,Reducer根据Action和当前状态生成一个新的状态。以此形成了一个循环。

二、为什么要用Redux?

2.2)Redux与MVC的对比

MVC作为苹果推出iOS以来官方就推荐的架构,所有人都应该不陌生。MVC主要有两个问题。首先MVC其实缺少了状态管理的能力,导致为了管理状态视图控制器越写越复杂。这也是我们开发中常常遇到的问题。它的另一个问题是状态传递很混乱,有很多方法可以做到传递状态:比如callbacks,delegations,key value observation,notification以及直接设置视图控制器的属性。有这么多的方法可以传递状态。每一个开发可能都有自己的一些偏好,所以往往一起合作的时候,项目中会出现各种形式的代码来传递状态。这会导致代码的可读性与可维护性降低。你很难看出一些状态会与哪些UI相关,在实际开发中的体现就是很容易在迭代或者修复bug的过程中引入新的bug。

2.1)Redux与MVVM对比

  1. 状态绑定的代码比较多。代码冗余比较多,比较枯燥且可能出错。而Redux则是框架已经帮忙处理好了状态绑定。
  2. 容易测试业务逻辑,相对于ViewModel的测试,对Reducer进行测试更容易编写。
  3. 代码风格较Redux不够统一,导致代码易读性不如Redux。
  4. 状态的改变较Redux不容易跟踪。如果出了问题,需要调试比较麻烦。
  5. 状态传递不太方便。如果需要将状态传递到比较深的视图上,往往是不太方便的。而Redux可以通过框架的能力轻松的将状态送到任何地方。
  6. MVVM容易出现冗余的状态处理逻辑。Redux更容易复用状态处理的逻辑,而且因为Rdux的状态处理逻辑是Reducer,所以是不会带来负面影响的。

三、什么时候使用Redux

从项目大小的角度思考去采取何种架构方式也不失为一种方法。当一个项目足够小,只有一个人开发维护的时候,其实你完全可以不管什么架构。撸起袖子直接干就行了。当项目有一定复杂度之后,或者需要多人合作开发了。此时你有面临两种选择MVVM或者Redux。上面已经对比过两者,所以你直接选Redux就好了。总结一下就是,如果项目较大,或者多人合作的项目直接选择Redux。

四、Redux的核心概念

5.1)store

这类似一个状态仓库,负责存储状态并分发Action。Store里面又一个dispatch方法,可以通过它来发送Action。

5.2)reducer

Reducer被用来更新全局状态。reducer是唯一一个可以改变状态的地方。一个应用有多个组合在一起的Reducer。Store通过dispatch是将Action发送到Reducer上进行处理。

5.3)action

Action用来标示需要发生什么动作,作为Reducer方法的参数之一,帮助Reducer决定如何处理状态。

还有一些其它的概念比如中间件。我们这里只介绍基础的概念,暂时不用去管。这里是redux flow的图,展示了不同组件之间如何配合。

SwiftUI + Redux

Redux Data Flow

六、手动实现redux

如果你喜欢通过视频来学习,我准备了一个Speed Code系列视频。你可以通过它和我一起来编写代码。可以点击此处跳转。

你可以通过这里下载到这里的代码。

6.1 核心代码

typealias Reducer = (State, Action) -> State  struct State {     var counter = 0 }  protocol Action {} class IncreaseAction: Action {} class DecreaseAction: Action {}  class Store: ObservableObject {     var reducer: Reducer      private (set) var state: State      init(reducer:  Reducer, state: State) {         self.reducer = reducer         self.state = state     }      func dispatch(action: Action) {         self.state = self.reducer(self.state, action)     } }

6.2 使用示例

struct ContentView: View {      private var store: Store      var body: some View {         VStack {             Text("(store.state.counter)")             Spacer().frame(height: 10)             HStack {                 Button("+") {                     store.dispatch(action: IncreaseAction())                 }                 Spacer().frame(width: 10)                 Button("-") {                     store.dispatch(action: DecreaseAction())                 }             }         }.padding()     } }  struct ContentView_Previews: PreviewProvider {     static var previews: some View {         ContentView()     } }

6.3 注入Store

 struct redux_01App: App {     var body: some Scene {         WindowGroup {             let state = State()             let reducer: Reducer = { (state, action) -> State in                 switch action {                 case is IncreaseAction:                     return State(counter: state.counter + 1)                 case is DecreaseAction:                     return State(counter: state.counter - 1)                 default:                     break                 }                 return state             }             ContentView().environmentObject(Store(reducer: reducer, state: state))         }     } }

七、接下来去哪?

这个架构过于简单,并不能用于实际项目中。如果你习惯使用SwiftUI你可以去看看SwiftRex 项目。如果你还是在用UIKit开发App,那么你可以先看看ReSwift 项目。接下来我会准备SwiftRex相关的一些内容。

看完本章你将可以得到:

  • Redux的核心概念
  • 理解何时使用Redux架构
  • 手动实现简化的Redux架构

一、什么是Redux?

Redux和众所周知的MVC一样是一种App的架构,用来组织状态,UI以及业务逻辑。Redux通过状态中心(Store)来管理状态。状态一旦变化,使用到该状态的UI组件会及时收到通知,从而更新UI。用户点击按钮,会向状态中心发出一个Action,Reducer根据Action和当前状态生成一个新的状态。以此形成了一个循环。

二、为什么要用Redux?

2.2)Redux与MVC的对比

MVC作为苹果推出iOS以来官方就推荐的架构,所有人都应该不陌生。MVC主要有两个问题。首先MVC其实缺少了状态管理的能力,导致为了管理状态视图控制器越写越复杂。这也是我们开发中常常遇到的问题。它的另一个问题是状态传递很混乱,有很多方法可以做到传递状态:比如callbacks,delegations,key value observation,notification以及直接设置视图控制器的属性。有这么多的方法可以传递状态。每一个开发可能都有自己的一些偏好,所以往往一起合作的时候,项目中会出现各种形式的代码来传递状态。这会导致代码的可读性与可维护性降低。你很难看出一些状态会与哪些UI相关,在实际开发中的体现就是很容易在迭代或者修复bug的过程中引入新的bug。

2.1)Redux与MVVM对比

  1. 状态绑定的代码比较多。代码冗余比较多,比较枯燥且可能出错。而Redux则是框架已经帮忙处理好了状态绑定。
  2. 容易测试业务逻辑,相对于ViewModel的测试,对Reducer进行测试更容易编写。
  3. 代码风格较Redux不够统一,导致代码易读性不如Redux。
  4. 状态的改变较Redux不容易跟踪。如果出了问题,需要调试比较麻烦。
  5. 状态传递不太方便。如果需要将状态传递到比较深的视图上,往往是不太方便的。而Redux可以通过框架的能力轻松的将状态送到任何地方。
  6. MVVM容易出现冗余的状态处理逻辑。Redux更容易复用状态处理的逻辑,而且因为Rdux的状态处理逻辑是Reducer,所以是不会带来负面影响的。

三、什么时候使用Redux

从项目大小的角度思考去采取何种架构方式也不失为一种方法。当一个项目足够小,只有一个人开发维护的时候,其实你完全可以不管什么架构。撸起袖子直接干就行了。当项目有一定复杂度之后,或者需要多人合作开发了。此时你有面临两种选择MVVM或者Redux。上面已经对比过两者,所以你直接选Redux就好了。总结一下就是,如果项目较大,或者多人合作的项目直接选择Redux。

四、Redux的核心概念

5.1)store

这类似一个状态仓库,负责存储状态并分发Action。Store里面又一个dispatch方法,可以通过它来发送Action。

5.2)reducer

Reducer被用来更新全局状态。reducer是唯一一个可以改变状态的地方。一个应用有多个组合在一起的Reducer。Store通过dispatch是将Action发送到Reducer上进行处理。

5.3)action

Action用来标示需要发生什么动作,作为Reducer方法的参数之一,帮助Reducer决定如何处理状态。

还有一些其它的概念比如中间件。我们这里只介绍基础的概念,暂时不用去管。这里是redux flow的图,展示了不同组件之间如何配合。

SwiftUI + Redux

Redux Data Flow

六、手动实现redux

如果你喜欢通过视频来学习,我准备了一个Speed Code系列视频。你可以通过它和我一起来编写代码。可以点击此处跳转。

你可以通过这里下载到这里的代码。

6.1 核心代码

typealias Reducer = (State, Action) -> State  struct State {     var counter = 0 }  protocol Action {} class IncreaseAction: Action {} class DecreaseAction: Action {}  class Store: ObservableObject {     var reducer: Reducer      private (set) var state: State      init(reducer:  Reducer, state: State) {         self.reducer = reducer         self.state = state     }      func dispatch(action: Action) {         self.state = self.reducer(self.state, action)     } }

6.2 使用示例

struct ContentView: View {      private var store: Store      var body: some View {         VStack {             Text("(store.state.counter)")             Spacer().frame(height: 10)             HStack {                 Button("+") {                     store.dispatch(action: IncreaseAction())                 }                 Spacer().frame(width: 10)                 Button("-") {                     store.dispatch(action: DecreaseAction())                 }             }         }.padding()     } }  struct ContentView_Previews: PreviewProvider {     static var previews: some View {         ContentView()     } }

6.3 注入Store

 struct redux_01App: App {     var body: some Scene {         WindowGroup {             let state = State()             let reducer: Reducer = { (state, action) -> State in                 switch action {                 case is IncreaseAction:                     return State(counter: state.counter + 1)                 case is DecreaseAction:                     return State(counter: state.counter - 1)                 default:                     break                 }                 return state             }             ContentView().environmentObject(Store(reducer: reducer, state: state))         }     } }

七、接下来去哪?

这个架构过于简单,并不能用于实际项目中。如果你习惯使用SwiftUI你可以去看看SwiftRex 项目。如果你还是在用UIKit开发App,那么你可以先看看ReSwift 项目。接下来我会准备SwiftRex相关的一些内容。

看完本章你将可以得到:

  • Redux的核心概念
  • 理解何时使用Redux架构
  • 手动实现简化的Redux架构

一、什么是Redux?

Redux和众所周知的MVC一样是一种App的架构,用来组织状态,UI以及业务逻辑。Redux通过状态中心(Store)来管理状态。状态一旦变化,使用到该状态的UI组件会及时收到通知,从而更新UI。用户点击按钮,会向状态中心发出一个Action,Reducer根据Action和当前状态生成一个新的状态。以此形成了一个循环。

二、为什么要用Redux?

2.2)Redux与MVC的对比

MVC作为苹果推出iOS以来官方就推荐的架构,所有人都应该不陌生。MVC主要有两个问题。首先MVC其实缺少了状态管理的能力,导致为了管理状态视图控制器越写越复杂。这也是我们开发中常常遇到的问题。它的另一个问题是状态传递很混乱,有很多方法可以做到传递状态:比如callbacks,delegations,key value observation,notification以及直接设置视图控制器的属性。有这么多的方法可以传递状态。每一个开发可能都有自己的一些偏好,所以往往一起合作的时候,项目中会出现各种形式的代码来传递状态。这会导致代码的可读性与可维护性降低。你很难看出一些状态会与哪些UI相关,在实际开发中的体现就是很容易在迭代或者修复bug的过程中引入新的bug。

2.1)Redux与MVVM对比

  1. 状态绑定的代码比较多。代码冗余比较多,比较枯燥且可能出错。而Redux则是框架已经帮忙处理好了状态绑定。
  2. 容易测试业务逻辑,相对于ViewModel的测试,对Reducer进行测试更容易编写。
  3. 代码风格较Redux不够统一,导致代码易读性不如Redux。
  4. 状态的改变较Redux不容易跟踪。如果出了问题,需要调试比较麻烦。
  5. 状态传递不太方便。如果需要将状态传递到比较深的视图上,往往是不太方便的。而Redux可以通过框架的能力轻松的将状态送到任何地方。
  6. MVVM容易出现冗余的状态处理逻辑。Redux更容易复用状态处理的逻辑,而且因为Rdux的状态处理逻辑是Reducer,所以是不会带来负面影响的。

三、什么时候使用Redux

从项目大小的角度思考去采取何种架构方式也不失为一种方法。当一个项目足够小,只有一个人开发维护的时候,其实你完全可以不管什么架构。撸起袖子直接干就行了。当项目有一定复杂度之后,或者需要多人合作开发了。此时你有面临两种选择MVVM或者Redux。上面已经对比过两者,所以你直接选Redux就好了。总结一下就是,如果项目较大,或者多人合作的项目直接选择Redux。

四、Redux的核心概念

5.1)store

这类似一个状态仓库,负责存储状态并分发Action。Store里面又一个dispatch方法,可以通过它来发送Action。

5.2)reducer

Reducer被用来更新全局状态。reducer是唯一一个可以改变状态的地方。一个应用有多个组合在一起的Reducer。Store通过dispatch是将Action发送到Reducer上进行处理。

5.3)action

Action用来标示需要发生什么动作,作为Reducer方法的参数之一,帮助Reducer决定如何处理状态。

还有一些其它的概念比如中间件。我们这里只介绍基础的概念,暂时不用去管。这里是redux flow的图,展示了不同组件之间如何配合。

SwiftUI + Redux

Redux Data Flow

六、手动实现redux

如果你喜欢通过视频来学习,我准备了一个Speed Code系列视频。你可以通过它和我一起来编写代码。可以点击此处跳转。

你可以通过这里下载到这里的代码。

6.1 核心代码

typealias Reducer = (State, Action) -> State  struct State {     var counter = 0 }  protocol Action {} class IncreaseAction: Action {} class DecreaseAction: Action {}  class Store: ObservableObject {     var reducer: Reducer      private (set) var state: State      init(reducer:  Reducer, state: State) {         self.reducer = reducer         self.state = state     }      func dispatch(action: Action) {         self.state = self.reducer(self.state, action)     } }

6.2 使用示例

struct ContentView: View {      private var store: Store      var body: some View {         VStack {             Text("(store.state.counter)")             Spacer().frame(height: 10)             HStack {                 Button("+") {                     store.dispatch(action: IncreaseAction())                 }                 Spacer().frame(width: 10)                 Button("-") {                     store.dispatch(action: DecreaseAction())                 }             }         }.padding()     } }  struct ContentView_Previews: PreviewProvider {     static var previews: some View {         ContentView()     } }

6.3 注入Store

 struct redux_01App: App {     var body: some Scene {         WindowGroup {             let state = State()             let reducer: Reducer = { (state, action) -> State in                 switch action {                 case is IncreaseAction:                     return State(counter: state.counter + 1)                 case is DecreaseAction:                     return State(counter: state.counter - 1)                 default:                     break                 }                 return state             }             ContentView().environmentObject(Store(reducer: reducer, state: state))         }     } }

七、接下来去哪?

这个架构过于简单,并不能用于实际项目中。如果你习惯使用SwiftUI你可以去看看SwiftRex 项目。如果你还是在用UIKit开发App,那么你可以先看看ReSwift 项目。接下来我会准备SwiftRex相关的一些内容。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » SwiftUI + Redux求职学习资料
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们