我是swift的新手我不知道如何在单值中传递多值。我可以使用多个选择何时传递到下一页。所以如何在singlevalue中存储多个值。一个人帮我?我的代码是
var strRoomType = ""
var strroomtype = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let proModel = arrSpaceData[indexPath.row] as? RoomPropertyModel
let propertyView = self.storyboard?.instantiateViewController(withIdentifier: "DepartureLocationVC") as! DepartureLocationVC
propertyView.strRoomType = (proModel?.property_id as String?)!
// propertyView.strroomtype = (proModel?.property_id as String?)!
self.navigationController?.pushViewController(propertyView, animated: true)
}
答案 0 :(得分:3)
您必须收集所有选定行的indexpaths
。获取所选objects/models
的数组indexpaths
并将其存储在单个数组中。然后,您可以将整个数组传递到下一个viewcontroller
或您想要使用的任何位置。如果要在行选择中导航到下一个viewcontroller
,则总会有一个object/model
,因此您不需要数组。您可以简单地将整个对象/模型传递给下一个viewcontroller
。
答案 1 :(得分:1)
假设你有两个控制器,其中一个显示TableView中的学生列表,然后另一个控制器被推送,只显示一个学生信息。
首先,您需要将所有需要的信息分组到struct
或class
,我将使用struct,因为它是值类型。 (如果您不知道,请查阅参考值与值类型)
struct Student {
let name: String // using let prevent your fields from being changed or mutated
let age: Int
}
假设我们进入第一个包含
的ControllerUITableView
这就是你如何设置你的tableView:
1)填充tableView的数组看起来像arr = [Student]()
2)假设您使用的是默认UITableViewCell
,您可以设置cell.textLabel.text = arr[indexPath.row].name
和cell.detailTextLabel?.text = String(arr[indexPath.age])
等字段
3)numberofitemsinsection
将为arr.count
我的意思是你得到了要点......
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
/* here you have many options
on how to pass the **selected data** to the detail controller.
1) injecting the data into the detail controller via the initializer/ constructor
2) via property
3) injecting via method such as func setStudent(_ student: Student)
4) etc...
*/
let vc = DetailViewController(student: arr[indexPath.row])
self.navigationController?.pushViewController(vc, animated: true)
}
DetailViewController
final class DetailViewController: UIViewController {
private let student:Student
private let nameLabel:UILabel ....
init(student: Student) { //<--- injecting the student object into the controller
self.student = student
self.init(nibName: nil , bundle: nil)
}
// now you have the student do whatever you want with it
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = student.name
}
}