首页 > 解决方案 > 从prepare segue获取数据后将值字典添加到标签

问题描述

在准备 segue 中,我将数据添加到另一个控制器中的字典中,这是该字典:

var data =  [String:String]()

在准备 segue 中,我向字典添加值和键

movieDetail.data.updateValue("title", forKey: self.animationItems[index!].snippet.title)

movieDetail.data.updateValue("description", forKey: self.animationItems[index!].snippet.description)

这样对吗?

然后,在新的控制器中有一个插座:

@IBOutlet weak var movieTitle: UILabel!

这个标题应该得到字典的值(标题)

我这样做了:

override func viewDidLoad() {
    super.viewDidLoad()

    movieTitle.text = data[title]?
}

但它显示一个错误:

无法使用“字符串”类型的索引为“[字符串:字符串]”类型的值下标?

你能帮我解决这个问题吗?

标签: iosswiftdictionary

解决方案


它应该是:

override func viewDidLoad() {
    super.viewDidLoad()

    movieTitle.text = data["title"]
}

您应该添加""来表示字符串文字。

prepareForSegue的也是错的。的两个论点updateValue是相反的。为避免混淆,您应该始终使用以下dict[key] = value语法:

movieDetail.data["title"] = self.animationItems[index!].snippet.title

movieDetail.data["description"] = self.animationItems[index!].snippet.description

无论如何,您应该使用类/结构来表示您的电影,然后这些问题就会消失。

struct Movie {
    var title: String
    var description: String
}

// in MovieDetailController
var movie: Movie!

// in prepareForSegue
movieDetail.movie = Movie(title: self.animationItems[index!].snippet.title, description: self.animationItems[index!].snippet.description)

// in viewDidLoad
movieTitle.text = movie.title

推荐阅读