我一直在尝试使用类类型键声明一个NSDictionary,其值如下:
var catAndSubCatDict: NSDictionary<Category, Array<SubCategory>> = NSDictionary<Category, Array<SubCategory>>()
Run Code Online (Sandbox Code Playgroud)
这里,"Category"和"SubCategory"是全局类.我知道我不能将类类型用于关键字段.但是,无论如何,我应该做到这一点.有没有办法做到这一点?如何声明专门的NSDictionary或类似的东西来做到这一点?
另外,我使用这样的字典:
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
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的回答,
最好的祝福
Ant*_*nio 14
NSDictionary它不支持泛型,所以你不能声明的方式-如果你想使用它,如下实例吧:
var catAndSubCatDict: NSDictionary = NSDictionary()
Run Code Online (Sandbox Code Playgroud)
雨燕提供了一个新的字典类型,它不支持泛型,并建立它,你只需要更换NSDictionary与Dictionary您的代码:
var catAndSubCatDict: Dictionary<Category, Array<SubCategory>> = Dictionary<Category, Array<SubCategory>>()
Run Code Online (Sandbox Code Playgroud)
或使用以下紧凑形式之一:
var catAndSubCatDict: [Category : Array<SubCategory>] = [Category : Array<SubCategory>]()
var catAndSubCatDict: [Category : [SubCategory]] = [Category : [SubCategory]]()
Run Code Online (Sandbox Code Playgroud)
请注意,在上面提到的所有情况下,您可以使用类型推断并通过删除变量类型来缩短代码:
var catAndSubCatDict = NSDictionary()
var catAndSubCatDict = Dictionary<Category, Array<SubCategory>>()
var catAndSubCatDict = [Category : Array<SubCategory>]()
var catAndSubCatDict = [Category : [SubCategory]]()
Run Code Online (Sandbox Code Playgroud)
最后,使用swift词典,您可以使用类作为键 - 您需要做的是使键类(Category在您的代码中)实现Hashable和Equatable协议
| 归档时间: |
|
| 查看次数: |
21180 次 |
| 最近记录: |