Проблемы добавления 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)
}
Другие вопросы по тегам