iOS小技能:SKU視圖搭建

語言: CN / TW / HK

“我正在參加「掘金·啟航計劃」”

引言

最小庫存管理單元(Stock Keeping Unit, SKU)是一個會計學名詞,定義為庫存管理中的最小可用單元。 對於一種商品而言,當他的品牌、型號、配置、花色、容量、生產日期、保質期、用途、價格、產地等屬性與其他商品存在不同時,就是一個不同的最小存貨單元。

SKU 就是商品在規格上的一種組合,比如油燜大蝦有微辣小份, 也有不辣中份 ,不同的組合就是不同的SKU,把一組滿足條件的屬性叫做條件式 。

```bash 商品規格
款式 : 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. 根據已選中的一個或多個屬性過濾出剩餘屬性的可選性

```objectivec @interface SKUDataFilter : NSObject

@property (nonatomic, assign) id dataSource;

//當前 選中的屬性indexPath @property (nonatomic, strong, readonly) NSArray selectedIndexPaths; //當前 可選的屬性indexPath @property (nonatomic, strong, readonly) NSSet availableIndexPathsSet;

```

  1. 根據選中的所有屬性查詢對應的結果(庫存、價格等)

```objectivec //條件式 對應的 結果數據(庫存、價格等) - (id)filter:(SKUDataFilter *)filter resultOfConditionForRow:(NSInteger)row;

```

為規格屬性加一個座標(屬性ID),記錄他們的位置

```objectivec 0 1 2 0 F M 1 R G B 2 L X S

SKU: 用下標(屬性ID)表示條件式 M,G,X - 26元,30件 --- (1,1,1) F,G,S - 28元,32件 --- (0,1,2) F,R,X - 29元,45件 --- (0,0,1)

```

SKUDataFilterDataSource代理方法: 判斷某個屬性是否存在於某個條件式中 ```objectivec //屬性種類個數 - (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

例子:對應式的顏色ID在第一個位置,但是規格數據的顏色在第二個位置。所以導致判斷對應式完整性的時候,從尺碼數據組中尋找顏色ID。

對應式:"skuPropertyValId" : "1149583675277578240,1163819789202886656",

規格數據:productProductSpecifications

json "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" : "米白" } ] } ],