【发布时间】:2020-04-03 09:08:51
【问题描述】:
所以我正在尝试制作一个NSMutableArray,它可以在另一个视图控制器输入值时更新。
另一个视图控制器是我们的“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:我为minutesArray设置了一个Int(minutesint),通过UITextField输入并转换为int。然后将其放入我们的UserDefaults 以用于我们的其他视图控制器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 声明。如您所见,它将所有内容都设置到我们的 tableview 中,非常漂亮。
但是,当我尝试使用其他问题的提示时,例如使用 NSArray 的“减少”来总结所有元素时,我从这段代码中得到了这个错误:
let sumarray = minutesArray.reduce(0, +)
//Error: Ambiguous reference to member '+'
我意识到我的格式有问题,因为当我使用像
这样的不可变数组测试它时let array = [1, 2 ,3]
let testarray = array.reduce(0, +)
print (testarray)
它给了我一个漂亮、性感的 5 打印?
当我检查 array 的类型时,它显然是 [Int] 类型。但是,我认为 reduce 只能在 Arrays 上使用?
我做错了什么?
谁能指出我正确的方向?
【问题讨论】:
-
不要使用
NSMutableArray。使用原生 SwiftArray- 它可以像var一样免费更改 - 歧义消失了 -
... 并且强烈建议不要使用多个数组作为数据源(同样)。