मैं कक्षा प्रकार कुंजी और इस तरह के मूल्य के साथ एक NSDictionary घोषित करने की कोशिश कर रहा हूं:
var catAndSubCatDict: NSDictionary<Category, Array<SubCategory>> = NSDictionary<Category, Array<SubCategory>>()
यहां, "श्रेणी" और "उपश्रेणी" वैश्विक हैंकक्षाएं। मुझे पता है कि मैं कुंजी क्षेत्र के लिए कक्षा प्रकार का उपयोग नहीं कर सकता। हालांकि, मुझे वैसे भी इसे हासिल करना चाहिए। क्या इसे करने का कोई तरीका है ? ऐसा करने के लिए मैं विशेष एनएस डिक्शनरी या इसी तरह की चीजें कैसे घोषित कर सकता हूं?
इसके अलावा, मैं इस शब्दकोश का उपयोग इस तरह करता हूं:
for(var i=0; i<resultJson.count; i++)
{
let subCategoryItemList = resultJson.objectAtIndex(i) as NSDictionary
let categoryItem = subCategoryItemList.valueForKey(WSConstants.CATEGORY_OBJ) as NSDictionary
var category: Category = Category()
category.categoryId = categoryItem.valueForKey(WSConstants.CATEGORY_ID) as Int
category.categoryName = categoryItem.valueForKey(WSConstants.NAME) as String
var subCategoryList: Array<SubCategory> = []
let jsonSubCategoryList = subCategoryItemList.allKeysForObject(WSConstants.SUBCATEGORY_LIST_OBJ) as NSArray
for(var i=0; i<jsonSubCategoryList.count; i++)
{
let subCategoryObj = jsonSubCategoryList.objectAtIndex(i) as NSDictionary
var subCategory: SubCategory = SubCategory()
subCategory.subCategoryId = subCategoryObj.valueForKey(WSConstants.SUBCATEGORY_ID) as Int
subCategory.subCategoryName = subCategoryObj.valueForKey(WSConstants.NAME) as String
subCategory.subCategoryType = subCategoryObj.valueForKey(WSConstants.SUBCATEGORY_TYPE) as Int
subCategoryList.append(subCategory)
}
self.catAndSubCatDict.setValue(category, forkey: subCategoryList) // Also, I have to achieve this
}
आपके जवाबों के लिये धन्यवाद,
सादर
उत्तर:
उत्तर № 1 के लिए 13NSDictionary
कर देता है नहीं समर्थन जेनेरिक, इसलिए आप इस तरह से घोषित नहीं कर सकते - अगर आप इसका उपयोग करना चाहते हैं, तो इसे निम्नानुसार तुरंत चालू करें:
var catAndSubCatDict: NSDictionary = NSDictionary()
स्विफ्ट एक नया शब्दकोश प्रकार प्रदान करता है, जो जेनेरिक का समर्थन करता है, और इसे बनाने के लिए आपको बस प्रतिस्थापित करना होगा NSDictionary
साथ में Dictionary
आपके कोड में:
var catAndSubCatDict: Dictionary<Category, Array<SubCategory>> = Dictionary<Category, Array<SubCategory>>()
या इन कॉम्पैक्ट रूपों में से एक का उपयोग करें:
var catAndSubCatDict: [Category : Array<SubCategory>] = [Category : Array<SubCategory>]()
var catAndSubCatDict: [Category : [SubCategory]] = [Category : [SubCategory]]()
ध्यान दें कि उपरोक्त वर्णित सभी मामलों में आप प्रकार अनुमान का उपयोग कर सकते हैं और चर प्रकार को हटाकर कोड को छोटा कर सकते हैं:
var catAndSubCatDict = NSDictionary()
var catAndSubCatDict = Dictionary<Category, Array<SubCategory>>()
var catAndSubCatDict = [Category : Array<SubCategory>]()
var catAndSubCatDict = [Category : [SubCategory]]()
आखिरकार, तेज़ शब्दकोशों के साथ कर सकते हैं एक वर्ग को कुंजी के रूप में उपयोग करें - आपको क्या करना है कुंजी वर्ग बनाना है (Category
अपने कोड में) लागू करें Hashable
तथा Equatable
प्रोटोकॉल