美文网首页产品撸技术项目需要iOS电商开发
iOS分享之路-快速搭建电商平台】十七、购物车的完整实现

iOS分享之路-快速搭建电商平台】十七、购物车的完整实现

作者: 全栈攻城狮DWQ | 来源:发表于2017-03-13 13:34 被阅读7886次
DWQ-LOGO.jpeg

引述

在所有的电商平台中,不管是淘宝,天猫,唯品会,还是京东,有一个模块起着举足轻重的作用,当每年的双十一,双十二,我们准备好抢货大战的最好的准备就是提前将商品加入到购物车,对,咱们今天讲的就是购物车。本分享的框架 DWQShoppingCart 完成了购物车完整逻辑实现,希望能够帮助到广大书友和开发者。

DWQShoppingCart需要实现哪些功能

一个购物车需要实现哪些【主要】功能?我们先来罗列下:

  • 1、点击店铺名,选中该店铺所有在购物车的商品-->单个或者多个商品

  • 2、单个选中某一个店铺内的单个商品-->单个商品

  • 3、单个选中某几个店铺的单个商品-->多个商品

  • 4、全选后选中所有店铺所有单品-->多个商品

  • 5、选中某个商品后,点击加号➕或者减号- 对应结算价变化

  • 6、每次进入购物车,清空选中【模范淘宝逻辑】

  • 7、删除购物车中部分商品

  • 8、结算提交功能

DWQShoppingCart组成及部分实现原理

1.DWQShoppingCart组成
DWQShoppingCart.png
  • a.DataSources :模拟数据源文件,Plist文件,工程需要图片资源

  • b.ConfigFile :工程配置文件,包含宏定义,全局变量,头文件引入等

  • c.icons :工程用图标

  • d.DWQCartModel:Model类文件夹

  • e.DWQCartTableViewCell :购物车自定义cell以及分组视图

  • f.DWQShoppingCartController :购物车的主控制器

2.部分实现原理及其重点标注
  • a.自定义Cell的对外方法,减少属性在.h文件中的暴露,尽量使用方法来调用相关设置
#import <UIKit/UIKit.h>

@class DWQGoodsModel;
typedef void(^DWQNumberChangedBlock)(NSInteger number);
typedef void(^DWQCellSelectedBlock)(BOOL select);
@interface DWQCartTableViewCell : UITableViewCell
//商品数量
@property (assign,nonatomic)NSInteger dwqNumber;
@property (assign,nonatomic)BOOL dwqSelected;

- (void)reloadDataWithModel:(DWQGoodsModel*)model;
- (void)numberAddWithBlock:(DWQNumberChangedBlock)block;
- (void)numberCutWithBlock:(DWQNumberChangedBlock)block;
- (void)cellSelectedWithBlock:(DWQCellSelectedBlock)block;
@end

dwqNumber :主要是提供给外部修改显示的商品数量,商品数量的变动,放在cell内;一般情况下,外部需要和服务器交互,只有商品数量真正(服务器内记录的数据)发生变化了,才能去修改显示的数目,在上面的第二个和第三个方法的block内修改cell的这个属性即可,记得也要修改相应的数据模型;
dwqSelected :主要是提供给外部修改该商品的选中状态,将这个显示状态的变动放在了cell外部进行操作,同样是考虑到,外部要和服务器进行交互,只有商品真正(服务器记录的数据)添加到订单内,才能改变显示状态,同样在上面的第四个方法的block内修改这个属性即可,同样也要修改相应的数据模型;

PS:如果这两个量的变化不需要和服务器交互,直接在本地完成的,其显示状态可以直接在cell内部相应的点击方法里修改即可,外部只需修改相应的数据模型;
  • b.关于价格的计算逻辑
    价格的计算,这里我是采用的遍历已选择的数组,取出其中的Model来计算的,示例代码如下;

/**

 *  计算已选中商品金额
 */
-(void)countPrice {
    double totlePrice = 0.0;

    for (DWQCartModel *model in self.selectedArray) {

        double price = [model.price doubleValue];

        totlePrice += price*model.number;
    }
    self.totlePriceLabel.text = [NSString stringWithFormat:@"¥%.2f",totlePrice];
}

DWQShoppingCart的使用

  • 1.将DWQShoppingCart文件夹拖入工程中

  • 2.修改增加DWQShoppingCartController数据转模型以及和和服务器的交互

  • 3.添加必要的验证逻辑等

  • 4.需要注意的是,Demo中的模型前三个属性,是必须要有的,一般购物车也都有这些属性,
    select:用来记录当前数据是否被选中;
    number和price:用来计算总价;

DWQShoppingCart的效果展示

购物车演示.gif

DWQShoppingCart的Demo下载

DWQShoppingCartDemo

广大书友感觉好不错的话给个好评和点赞,记得在GitHub上给个Star噢!!~~~~~

相关文章

网友评论

  • Elephante:你好 demo的链接能再发一下么
  • 一起走过的黑夜变一地白雪:说一下写这个框架的思路?首先怎样,然后怎样?
    一起走过的黑夜变一地白雪: @iOS攻城狮DWQ 嗯嗯 挺好的,我试着弄一下,有什么问题继续再和你沟通,多谢了。
    全栈攻城狮DWQ:起初写这个框架时候首先考虑的是如何获取选中的价格和数量,开始想过用KVO的模式,后来采用了从Model中取数据。所以,就有了首先要判断是否选中,也就有了dwqSelected属性的声明,其次还要有数量,就增加了dwqNumber属性,最后就是在cell选中的时候计算价格,从Model中获取数据,然后计算价格,也就有了countPrice方法的实现。

本文标题:iOS分享之路-快速搭建电商平台】十七、购物车的完整实现

本文链接:https://www.haomeiwen.com/subject/aemfnttx.html