Проблемы добавления NSIndexPath в качестве ключа и NSNumber в качестве значения в словаре?
Второй объект quickFilterDictionary
в self.preferencesListFilterDictionary
является nil
, Как добавить [NSIndexPath
] индексный путь (как ключ) и NSNumber
(как значение) в Dictionary
?
Примечание: первый объект успешно добавлен, только 2-й объект nil
когда я напечатал self.preferencesListFilterDictionary
в консоли. Могу ли я знать, что я делаю неправильно в приведенном ниже коде?
self.preferencesListFilterDictionary["price"] = 1000
self.quickFilterArr = [localizedStrOf("deliveryNowOnly"),localizedStrOf("rated")]
var quickFilterDictionary = Dictionary<NSIndexPath, NSNumber?>()
for obj in self.quickFilterArr {
let row = self.quickFilterArr.indexOf(obj)
let indexPath = NSIndexPath(forRow:row!, inSection: 0)
quickFilterDictionary[indexPath] = NSNumber(bool: false)
}
print(quickFilterArr.count)
print(quickFilterDictionary)
self.preferencesListFilterDictionary.updateValue(quickFilterDictionary as? AnyObject, forKey: "quickFilterDictionaryKey")
print(self.preferencesListFilterDictionary)
консольная печать:
▿ [1] : 2 elements
- .0 : "quickFilterDictionaryKey"
- .1 : nil
Чтобы получить вышеупомянутый словарь bool из числа, я написал следующий код -
func getQuickFilterValueOfIndexpath(indexPath:NSIndexPath) -> Bool {
if let val = self.preferencesListFilterDictionary["quickFilterDictionaryKey"] {
// now val is not nil and the Optional has been unwrapped, so use it
let tempDict = val as! Dictionary<NSIndexPath, NSNumber?>
if let boolVal = tempDict[indexPath] {
return boolVal!
}
}
return false
}
1 ответ
Я думаю, что вы не понимаете разницы между строкой, IndexPath и Index.
В следующем коде:
let row = self.quickFilterArr.indexOf(obj)
Если вы щелкнете по строке, вы увидите, что это объект типа Array.Index?
, Это не ряд.
Также есть ли причина, по которой вы используете NSNumber, NSIndexPath и значение обновления для ключа? В отличие от Number, IndexPath и просто обновите значения словаря с помощью: preferencesListFilterDictionary["quickFilterDictionaryKey] = quickFilterDictionary
Если вы выберете опцию quickFilterArr, то это массив IndexPaths [IndexPath]. Чтобы сослаться на IndexPath по выбранному вами индексу в этом массиве, вы просто сделаете:
if let arrayIndex = quickFilterArr.indexOf(obj) {
//if your array is an array of Index Paths
//you would then pull the IndexPath object at the index you have defined above
let indexPath = quickFilterArr[arrayIndex]
quickFilterDictionary[indexPath] = Number(bool: false)
}