I have created a program with several screens that display sets of random numbers; it all works perfectly fine while populating the labels.
For one of the screens I need to show two independent results though. I tried this with Label and it didn't look all to well, so I thought about using TableView and now it is quite a challenge to actually push the result data to the rows of the table.
The code looks like this:
class EController: UIViewController {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
}
func allTogether(_ SetB:Set<Int>, _ Scope:ClosedRange<Int>) -> (Set<Int>){
func iterateNremove2() -> (Set<Int>, Set<Int>){
var nums = SetB
let scp = Scope
var reslts = Set<Int>()
for _ in scp{
let randNum = nums.randomElement()!
reslts.insert(randNum)
nums.remove(randNum)
}
return (nums, reslts)
}
let go = iterateNremove2()
let res = go.1
return (res)
}
@IBAction func Erand(_ sender: Any) {
let it = allTogether(Set(1...45), 1...10)
let that = allTogether(Set(1...9), 1...3)
let eStrngM = it.map(String.init).joined(separator: ", ")
let eStrngS = that.map(String.init).joined(separator: ", ")
let finRslts = [eStrngM, eStrngS]
}
}
extension EController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = finRslts[indexPath.row]
return cell
}
}
Sorry for such a big bulk, but the problem might be scattered in the code or the whole solution might be faulty (this is what I came up with after I watched the tutorials).
The only error I get is "Cannot find finRslts in scope" when "cell.textLabel?.text" is called.
I tried moving the randomizing function and the button's @IBAction between different classes and the error was always the same. I either miss something small and don't know how to search for it or the whole solution is faulty. Please help.
You have to create
finRslts– by the way Swift doesn't have a 8+3 variable name restriction like in Windows 95 – on the top level of the class right after the table view outlet.In
Erandreplacewith
And it's good practice to return the number of items in the array in
numberOfRowsInSection