Ios 将数据从uitableview传递到其他uiview

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",

我是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", "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”]