“我正在参与「启航方案」”

引言

iOS小技能:SKU视图搭建

最小库存办理单元(Stock Keeping Unit, SKU)是一个会计学名词,界说为库存办理中的最小可用单元。 关于一种产品而言,当他的品牌、型号、配置、花色、容量、生产日期、保质期、用途、价格、产地等特点与其他产品存在不同时,便是一个不同的最小存货单元。

SKU 便是产品在标准上的一种组合,比如油焖大虾有微辣小份, 也有不辣中份 ,不同的组合便是不同的SKU,把一组满意条件的特点叫做条件式 。

产品标准
款式 : F    M
色彩 : R    G    B
尺寸 : L    X    S    
SKU
M,G,X  -  36元,20件
F,G,S  -  38元,22件
F,R,X  -  39元,35件  

I SKU产品标准组合算法

SKU 组合算法:对产品标准组合的挑选过滤。依据已选中的一个或多个特点过滤出剩下特点的可选性,以及选完一切特点之后对应的结果信息(库存、价格等)

  1. 依据已选中的一个或多个特点过滤出剩下特点的可选性
@interface SKUDataFilter : NSObject
@property (nonatomic, assign) id<SKUDataFilterDataSource> dataSource;
//当前 选中的特点indexPath
@property (nonatomic, strong, readonly) NSArray <NSIndexPath *> *selectedIndexPaths;
//当前 可选的特点indexPath
@property (nonatomic, strong, readonly) NSSet <NSIndexPath *> *availableIndexPathsSet;
  1. 依据选中的一切特点查询对应的结果(库存、价格等)
//条件式 对应的 结果数据(库存、价格等)
- (id)filter:(SKUDataFilter *)filter resultOfConditionForRow:(NSInteger)row;

为标准特点加一个坐标(特点ID),记录他们的方位

    0    1    2
0   F    M
1   R    G    B
2   L    X    S    
SKU:  用下标(特点ID)表示条件式
M,G,X  -  26元,30件 --- (111)
F,G,S  -  28元,32件 --- (012)
F,R,X  -  29元,45件 --- (001)

SKUDataFilterDataSource署理办法: 判别某个特点是否存在于某个条件式中

//特点品种个数
- (NSInteger)numberOfSectionsForPropertiesInFilter:(SKUDataFilter *)filter;
/*
 * 对应的条件式
 * 这儿条件式的特点值,需要和propertiesInSection里面的数据类型保持一致
 */
- (NSArray *)filter:(SKUDataFilter *)filter conditionForRow:(NSInteger)row;
//满意条件 的 个数
- (NSInteger)numberOfConditionsInFilter:(SKUDataFilter *)filter;
/*
 * 每个品种一切的的特点值
 * 这儿不关心详细的值,可以是特点ID, 特点名,字典、model
 */
- (NSArray *)filter:(SKUDataFilter *)filter propertiesInSection:(NSInteger)section;
//查看数据是否正确
- (BOOL)checkConformToSkuConditions:(NSArray *)conditions {
    if (conditions.count != [_dataSource numberOfSectionsForPropertiesInFilter:self]) {
        return NO;
    }
    __block BOOL  flag = YES;
    [conditions enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSArray *properties = [_dataSource filter:self propertiesInSection:idx];
        if (![properties containsObject:obj]) {
            flag = NO;
            *stop = YES;
        }
    }];
    return flag;
}

II 相关问题

2.1 demo

获取demo请重视重视公号:iOS逆向

2.2 数据问题

问题:标准数据和条件式的标准ID数据次序不一致,导致数据检测不正确checkConformToSkuConditions

iOS小技能:SKU视图搭建

比如:对应式的色彩ID在第一个方位,但是标准数据的色彩在第二个方位。所以导致判别对应式完整性的时候,从尺码数据组中寻觅色彩ID。

对应式:"skuPropertyValId" : "1149583675277578240,1163819789202886656",

标准数据:productProductSpecifications

        "productProductSpecifications" : [
          {
            "id" : "1163389120697995264",
            "name" : "女装尺码",
            "anotherName" : "尺码",
            "specificationVals" : [
              {
                "value" : null,
                "id" : "1163819789173526528",
                "specificationId" : "1163389120697995264",
                "type" : 1,
                "name" : "XXS"
              },
              {
                "value" : null,
                "id" : "1163819789202886656",
                "specificationId" : "1163389120697995264",
                "type" : 1,
                "name" : "L"
              },
              {
                "value" : null,
                "id" : "1163819789286772736",
                "specificationId" : "1163389120697995264",
                "type" : 1,
                "name" : "5XL"
              }
            ]
          },
          {
            "id" : "0",
            "name" : "色彩",
            "anotherName" : "色彩",
            "specificationVals" : [
              {
                "value" : "#FFFFFF",
                "id" : "1149583675277578240",
                "specificationId" : "0",
                "type" : 2,
                "name" : "白色"
              },
              {
                "value" : "#E7E7E7",
                "id" : "1149583822787055616",
                "specificationId" : "0",
                "type" : 2,
                "name" : "米白"
              }
            ]
          }
        ],