Ios 在另一个类中使用用户选择的结构
我有一个包含结构的文件,每个结构包含一个数组 我希望能够使用用户在另一个视图中选择的结构!对不起,我不能解释我自己 代码如下: 这是一个包含训练的Ios 在另一个类中使用用户选择的结构,ios,swift,Ios,Swift,我有一个包含结构的文件,每个结构包含一个数组 我希望能够使用用户在另一个视图中选择的结构!对不起,我不能解释我自己 代码如下: 这是一个包含训练的 import Foundation struct Routines { let routineName: String let videoFileName: String let description: Array<Any> let thumbnailFileName: String static func fetchRoutine
import Foundation
struct Routines {
let routineName: String
let videoFileName: String
let description: Array<Any>
let thumbnailFileName: String
static func fetchRoutines() -> [Routines] {
let v1 = Routines(routineName: "Recommended Routine", videoFileName: "v1", description: Workout1.fetchWorkout1(), thumbnailFileName: "v8")
let v2 = Routines(routineName: "Routine Extra", videoFileName: "v2", description: Workout2.fetchWorkout2(), thumbnailFileName: "v2")
return [v1, v2]
}
}
struct Workout1 {
let excerciseName: String
let sets: Int
let reps: Int
static func fetchWorkout1() -> [Workout1] {
let w1 = Workout1(excerciseName: "Bench Press", sets: 3, reps: 8)
let w2 = Workout1(excerciseName: "Push Press", sets: 3, reps: 8)
let w3 = Workout1(excerciseName: "Squat", sets: 3, reps: 8)
let w4 = Workout1(excerciseName: "Deadlift", sets: 3, reps: 8)
let w5 = Workout1(excerciseName: "Bicep Curl", sets: 3, reps: 8)
let w6 = Workout1(excerciseName: "Tricep Pushdown", sets: 3, reps: 8)
return [w1,w2,w3,w4,w5,w6]
}
}
struct Workout2 {
let excerciseName: String
let sets: Int
let reps: Int
static func fetchWorkout2() -> [Workout2] {
let e1 = Workout2(excerciseName: "Bench Press", sets: 5, reps: 15)
let e2 = Workout2(excerciseName: "Push Press", sets: 3, reps: 3)
let e3 = Workout2(excerciseName: "Squat", sets: 5, reps: 5)
let e4 = Workout2(excerciseName: "Deadlift", sets: 3, reps: 3)
let e5 = Workout2(excerciseName: "Bicep Curl", sets: 5, reps: 15)
let e6 = Workout2(excerciseName: "Tricep Pushdown", sets: 5, reps: 15)
return [e1,e2,e3,e4,e5,e6]
}
}
在这里,我希望能够使用该阵列并显示信息
import Foundation
import UIKit
class WorkoutViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = #colorLiteral(red: 0.8352941176, green: 0.8352941176, blue: 0.8352941176, alpha: 1)
}
var workouts: [Workout1] = Workout1.fetchWorkout1()
//var workoutSelected = WorkoutsListViewController.workoutSelected
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return workouts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutCell", for: indexPath)
let workout = workouts[indexPath.row]
cell.textLabel?.text = workout.excerciseName
cell.textLabel?.textColor = UIColor.black
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let workout = workouts[indexPath.row]
tableView.deselectRow(at: indexPath, animated: true)
print("Do \(workout.sets) sets of \(workout.reps) reps of \(workout.excerciseName)")
}
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.backgroundColor = UIColor.clear
}
}
在didSelectRowAt中,将索引路径作为performSegue的发送方参数传递,不传递其他内容
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "segueToWorkout", sender: indexPath)
}
然后覆盖segue的preparefor,将训练数组传递给目标控制器
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueToWorkout" {
let destinationController = segue.destination as! WorkoutViewController
let indexPath = sender as! IndexPath
let routine = routines[indexPath.row]
destinationController.workouts = routine.description
}
}
顺便说一下,您的结构非常混乱。为什么两个训练数组不使用一个结构,这样可以避免任何声明
struct Workout {
let excerciseName: String
let sets: Int
let reps: Int
static func fetchWorkout1() -> [Workout] {
return [Workout(excerciseName: "Bench Press", sets: 3, reps: 8),
Workout(excerciseName: "Push Press", sets: 3, reps: 8),
Workout(excerciseName: "Squat", sets: 3, reps: 8),
Workout(excerciseName: "Deadlift", sets: 3, reps: 8),
Workout(excerciseName: "Bicep Curl", sets: 3, reps: 8),
Workout(excerciseName: "Tricep Pushdown", sets: 3, reps: 8)]
}
static func fetchWorkout2() -> [Workout] {
return [Workout(excerciseName: "Bench Press", sets: 5, reps: 15),
Workout(excerciseName: "Push Press", sets: 3, reps: 3),
Workout(excerciseName: "Squat", sets: 5, reps: 5),
Workout(excerciseName: "Deadlift", sets: 3, reps: 3),
Workout(excerciseName: "Bicep Curl", sets: 5, reps: 15),
Workout(excerciseName: "Tricep Pushdown", sets: 5, reps: 15)]
}
}
然后在例程中声明
和在WorkoutViewController中
您必须在某个点重新加载表格视图,例如,在view中,将出现表格视图,但决不能使用didSet observer。已解决!多亏了@vadrian
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueToWorkout" {
let destinationController = segue.destination as! UINavigationController
let indexPath = sender as! IndexPath
let routine = routines[indexPath.row]
let dvc = destinationController.topViewController as! WorkoutViewController
svc.workouts = routine.description
}
}
不走运。我认为存在问题:重写func tableView_utableview:UITableView,didSelectRowAt indexPath:indexPath{let routine=routines[indexPath.row]PrintRoutineName workoutSelected=routine.description printworkoutSelected/*WorkoutsListViewController.workoutSelected=routine.description printWorkoutsListViewController.workoutSelected*/tableView.Decelrowat:indexPath,动画:true PerformsgueWithIdentifier:SegueTowork,发件人:self}例行公事。说明没有得到[]。运气不好意味着什么?请使用我建议的代码。不需要在didSelectRowAt中获取例程。应用程序崩溃。无法将“UINavigationController”0x1162c9a20类型的值强制转换为“BodyweightFitness.WorkoutViewController”0x109b96348。2019-02-13 20:23:41.091293+0100 BodyweightFitness[30764:20025883]无法将类型为“UINavigationController”0x1162c9a20的值强制转换为“BodyweightFitness.WorkoutViewController”0x109b96348。已解决。重写segue:UIStoryboardSegue的函数准备,发送方:有吗?{如果segue.identifier==seguetoworkut{let destinationController=segue.destinationas!UINavigationController let indexath=sender as!indexPath let routine=routines[indexath.row]将dvc=destinationController.topViewController设为!WorkoutViewController svc.workouts=routine.description}
let description: [Workout]
var workouts = [Workout]()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueToWorkout" {
let destinationController = segue.destination as! UINavigationController
let indexPath = sender as! IndexPath
let routine = routines[indexPath.row]
let dvc = destinationController.topViewController as! WorkoutViewController
svc.workouts = routine.description
}
}