Ios 将数据从uitableview传递到其他uiview
我是swift和IOS新手,我在将字典数据传递到其他uiview时遇到一些问题,有人能帮我解决吗 Lesson StableViewer控制器:Ios 将数据从uitableview传递到其他uiview,ios,swift,uitableview,segue,Ios,Swift,Uitableview,Segue,我是swift和IOS新手,我在将字典数据传递到其他uiview时遇到一些问题,有人能帮我解决吗 Lesson StableViewer控制器: var mylessons = [ ["title":"Posture", "subtitle":"Set up your body", "bgimage":"1", "lesimage":"l1"], ["title":"Breathing", "subtitle":"Breathing deeply", "bgimage":"2",
var mylessons = [
["title":"Posture", "subtitle":"Set up your body", "bgimage":"1", "lesimage":"l1"],
["title":"Breathing", "subtitle":"Breathing deeply", "bgimage":"2", "lesimage":"l2"],
["title":"Breathing", "subtitle":"Breathing Exercise", "bgimage":"3", "lesimage":"l3"],
["title":"Health", "subtitle":"Do’s & Don’ts", "bgimage":"4", "lesimage":"l4"]
]
@IBOutlet weak var LTitle: UILabel!
var SelectedLessons = [Dictionary<String, String>()]
override func viewDidLoad() {
super.viewDidLoad()
LTitle.text = SelectedLessons["title"]
// Do any additional setup after loading the view.
}
及
Lesson详细信息查看控制器:
var mylessons = [
["title":"Posture", "subtitle":"Set up your body", "bgimage":"1", "lesimage":"l1"],
["title":"Breathing", "subtitle":"Breathing deeply", "bgimage":"2", "lesimage":"l2"],
["title":"Breathing", "subtitle":"Breathing Exercise", "bgimage":"3", "lesimage":"l3"],
["title":"Health", "subtitle":"Do’s & Don’ts", "bgimage":"4", "lesimage":"l4"]
]
@IBOutlet weak var LTitle: UILabel!
var SelectedLessons = [Dictionary<String, String>()]
override func viewDidLoad() {
super.viewDidLoad()
LTitle.text = SelectedLessons["title"]
// Do any additional setup after loading the view.
}
@IBOutlet弱变量LTitle:UILabel!
var SelectedLessons=[Dictionary()]
重写func viewDidLoad(){
super.viewDidLoad()
LTitle.text=SelectedLessons[“title”]
//加载视图后执行任何其他设置。
}
最后,它有一个错误“不能用“String”类型的索引为“[Dictionary]”类型的值下标。”首先,您的SelectedLessons类型错误。您需要使用类似于
var SelectedLessons:Dictionary<String, String>?
var SelectedLessons:字典?
你需要正确的物体
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
let lessegue = segue.destination as! LessonDetailsViewController
lessegue.SelectedLessons = sender as? Dictionary<String,String>
}
override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
让lessegue=segue.destination为!LessonDetailsViewController
lessegue.SelectedLessons=发件人身份?字典
}
您应该声明
var SelectedLessons = [String, String]()
您当前的声明是一系列字典您有许多问题 首先是编码风格问题。变量名称应以小写字母开头,因此
SelectedLessons
应为SelectedLessons
其次,您可能希望将用户选择的课程传递到目标,而不是整个阵列
您的数组mylessons
是一个字典数组:(键入[[String:String]]
)
您可能应该在课程DetailsViewController
selectedLesson
(单数,以小写字母开头)中命名变量,并将其键入[String:String]
(单个课程)
那么您的prepareForSegue可能如下所示:
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
guard
let lessegue = segue.destination as? LessonDetailsViewController,
let selectedRow = tableView.indexPathForSelectedRow?.row else {
print("Error. No row selected. Exiting."
fatalError()
}
lessegue.selectedLesson = myLessons[selectedRow]
}
(对于没有选定行的情况,上面的代码应该具有更好的错误处理能力,但它应该让您了解这一点。)
编辑:
顺便说一句,编写prepare(for:)
方法时,如果您只会切换到单一类型的单一视图控制器,那么这不是一个好主意。返回并扩展应用程序以添加其他分段是很常见的,如果这样做,上面的代码将崩溃。最好使用switch语句:
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
switch segue.destination {
case let lessegue as LessonDetailsViewController:
guard
let selectedRow = tableView.indexPathForSelectedRow?.row else {
print("Error. No row selected. Exiting."
fatalError()
}
lessegue.selectedLesson = myLessons[selectedRow]
default:
print("Unrecognized segue. Exiting."
fatalError()
}
}
该语法创建了一个switch语句,其中每个case都根据目标视图控制器的类型执行,并对目标类型进行了内置转换。这是switch语句的一个简洁变体,在
prepare(for:)中非常有用
函数。非常感谢,我的应用程序现在可以使用了。此外,LTitle.text=SelectedLessons[“title”]需要更改LTitle.text=SelectedLessons?[“title”]