iOS小技能:SKU檢視搭建
“我正在參加「掘金·啟航計劃」”
引言
最小庫存管理單元(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 組合演算法:對商品規格組合的篩選過濾。根據已選中的一個或多個屬性過濾出剩餘屬性的可選性,以及選完所有屬性之後對應的結果資訊(庫存、價格等)
- 根據已選中的一個或多個屬性過濾出剩餘屬性的可選性
```objectivec @interface SKUDataFilter : NSObject
@property (nonatomic, assign) id
//當前 選中的屬性indexPath
@property (nonatomic, strong, readonly) NSArray
```
- 根據選中的所有屬性查詢對應的結果(庫存、價格等)
```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
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" : "米白"
}
]
}
],
- iOS小技能:UITableView的適配 (iOS10/iOS14/iOS16.0)
- iOS小技能:和uni-app、unity的融合方案
- iOS小技能:iOS15崩潰排查技巧(symbolicatecrash符號化分析問題、匯出和隱藏符號)
- iOS小技能:【intercept the HTTP/HTTPS requests 】利用NSURLProtocol 攔截請求
- iOS小技能: tweak 整合CocoaAsyncSocket(建連、斷開、重連、心跳、通用請求)
- iOS小技能:iOS13 證件掃描 & 文字識別API
- iOS小技能:整合下拉重新整理控制元件 & 實現無感知上拉載入更多
- iOS小技能:程式碼觸發button的點選事件、快速找到按鈕action方法
- iOS小技能:撥號、發郵件、簡訊、應用間跳轉
- iOS小技能:鏈式程式設計在iOS開發中的應用
- iOS小技能:iOS14 讀取使用者剪下板資料彈出提示的相容方案
- iOS小技能:因境外IP無法訪問導致 App 被拒的解決方案
- iOS小技能:RSA簽名、驗籤、加密、解密的原理
- iOS小技能:Xcode14新特性(適配)
- iOS小技能:Socket基礎知識
- iOS小技能:SKU檢視搭建
- iOS小技能: 日曆的使用(案例:兩個時間的比較、獲取最近30天的資料)
- iOS小技能:1. iOS 實現json資料提交 2. 對同一個URL的多次請求進行資料快取 3. 檢查網路狀態
- iOS小技能:使用正則表示式對聊天記錄的關鍵詞進行監控
- iOS小技能:去掉/新增導航欄黑邊(iOS13適配)