日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS-MVVM架构优化

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS-MVVM架构优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MVVM模式將Presenter改名為ViewModel,基本上與MVP模式完全一致。

唯一的區別是,它采用雙向綁定(data-binding) : View<->ViewModel, ViewModel作為Model中值的映射,是數據發生改變時,通知View中發生改變,以后不需要考慮View和Model之間的交互更新,只需著手界面布局邏輯即可。

View和Model 不直接關聯,而是通過ViewModel作為樞紐,溝通View和Model之間的關系

View中控件的值與屬性進行綁定,通過KVO鍵值觀察(這樣當model的值發生變化時,View會自動發生改變)?

View和Model通過ViewModel實現動態關聯

1.MVVModel代碼

#import <Foundation/Foundation.h> @interface MVVMModel : NSObject @property(nonatomic,copy)NSString *name; @end

2.MVVMViewModel代碼

MVVMViewModel.h

#import <Foundation/Foundation.h> #import "MVVMModel.h" @interface MVVMViewModel : NSObject @property(nonatomic,copy)NSString *nameStr; @property(nonatomic,strong)MVVMModel *model;-(void)setWithModel:(MVVMModel *)model; -(void)clickChangeName; @end

MVVMViewModel.m

#import "MVVMViewModel.h"@implementation MVVMViewModel -(instancetype)init{if (self = [super init]) {}return self; }-(void)setWithModel:(MVVMModel *)model{self.model = model;self.nameStr = model.name; } -(void)clickChangeName{self.model.name = [NSString stringWithFormat:@"name%d",arc4random()%10];self.nameStr = self.model.name;NSLog(@"%@",self.nameStr); } @end

3.MVVMView代碼

#import <UIKit/UIKit.h> #import "MVVMViewModel.h" @interface MVVMView : UIView -(void)setWithViewModel:(MVVMViewModel *)vm; @end#import "MVVMView.h" @interface MVVMView ()@property(nonatomic,strong)MVVMViewModel *vm; @property(nonatomic,strong)UILabel *label; @property(nonatomic,strong)UIButton *button;@end @implementation MVVMView- (instancetype)init {self = [super init];if (self) {self.backgroundColor = [UIColor whiteColor];self.frame = [UIScreen mainScreen].bounds;self.label = [[UILabel alloc]initWithFrame:CGRectMake(150,100 , 100, 30)];self.label.backgroundColor = [UIColor orangeColor];[self addSubview:_label];self.button = [UIButton new];_button.backgroundColor = [UIColor redColor];[_button setTitle:@"點擊" forState:UIControlStateNormal];[_button addTarget:self action:@selector(mvvmClickChangModel) forControlEvents:UIControlEventTouchUpInside];_button.frame = CGRectMake(150, 200, 50, 50);[self addSubview:_button];}return self; } - (void)setWithViewModel:(MVVMViewModel *)vm {self.vm = vm;//KVO[self.vm addObserver:self forKeyPath:@"nameStr" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];self.label.text = vm.nameStr;}-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change: (NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{if ([keyPath isEqualToString:@"nameStr"]&&[change objectForKey:NSKeyValueChangeNewKey]) {NSNumber *new = [change objectForKey:NSKeyValueChangeNewKey];self.label.text = [NSString stringWithFormat:@"%@",new];} } -(void)mvvmClickChangModel{[self.vm clickChangeName]; }-(void)dealloc{[self.vm removeObserver:self forKeyPath:@"nameStr"]; } @end

3.ViewController.m

#import "ViewController.h" #import "MVVMView.h" #import "MVVMModel.h" #import "MVVMViewModel.h"@interface ViewController () @property (nonatomic, strong) MVVMViewModel * viewModel ; @end@implementation ViewController - (void)viewDidLoad {[super viewDidLoad];MVVMView *MView = [MVVMView new];MVVMModel *model = [MVVMModel new];model.name = @"name1";MVVMViewModel *viewModel = [MVVMViewModel new];[self.view addSubview:MView];//*viewModel 作為樞紐 溝通view和model之間關系 [viewModel setWithModel:model];[MView setWithViewModel:viewModel]; } @end

?

?

?

?

轉載于:https://www.cnblogs.com/StevenHuSir/p/AppArchitecture_MVVM.html

總結

以上是生活随笔為你收集整理的iOS-MVVM架构优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。