Как найти сумму всех элементов NSMutableArray? стриж - PullRequest
2 голосов
/ 03 апреля 2020

Поэтому я пытаюсь создать NSMutableArray, который может обновляться, когда другой viewcontroller ввел значения.

Этот другой view-контроллер является нашим "AddNewViewController".

AddNewViewController.swift

nameArray.add(namestring)

minutesArray.add(minutesint!)


print(nameArray)
print(minutesArray)


UserDefaults.standard.set(nameArray.mutableCopy(), forKey: "namearray")
UserDefaults.standard.set(minutesArray.mutableCopy(), forKey: "minutesarray")
UserDefaults.standard.synchronize()

NameArray не имеет значения, использует введенную строку и добавляет ее в наш массив имен.

Проблема заключается в minutesArray: я установил Int (minutesint) для minutesArray, который вводится через UITextField и конвертируется в int. Затем это помещается в наш UserDefaults для использования в нашем другом viewcontroller, ViewController

ViewController.swift

nameArray = UserDefaults.standard.mutableArrayValue(forKey: "namearray")
minutesArray = UserDefaults.standard.mutableArrayValue(forKey: "minutesarray")


let myCell = UITableViewCell()
myCell.textLabel?.text = ("Name: \(nameArray[indexPath.row] as! String)    Score (minutes): \(minutesArray[indexPath.row] as! Int)")

return myCell

Я должен уточнить, что выше мое объявление cellForRowAt. Как вы можете видеть, это все отлично подходит для нашего табличного представления.

Однако, когда я пытаюсь использовать подсказки из других вопросов, таких как использование «Reduce» для NSArray, чтобы суммировать все элементы Я получаю эту ошибку из этого фрагмента кода:

let sumarray = minutesArray.reduce(0, +)
//Error: Ambiguous reference to member '+'

Я понимаю, что что-то не так с моим форматированием, потому что, когда я тестировал его с неизменяемым массивом вроде

let array = [1, 2 ,3]
let testarray = array.reduce(0, +)
print (testarray)

Это дает мне красивый, сексуальный принт 5?

Когда я проверил тип, который является массивом , это, очевидно, тип [Int]. Тем не менее, я думал, что уменьшить можно было использовать только на Array с?

Что я делаю не так?

Кто-нибудь может указать мне правильное направление?

1 Ответ

4 голосов
/ 03 апреля 2020

Прочитать его как массив int [Int] вместо

var minutesArray = UserDefaults.standard.array(forKey: "minutesarray") as? [Int] ?? [Int]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...