【问题标题】:Accessing parent class property from child class in Swift从 Swift 中的子类访问父类属性
【发布时间】:2017-09-26 05:14:04
【问题描述】:

我有两个ViewControllers。首先是MoviesVC,它显示了电影列表。第二个是BookmarkedVC,显示用户收藏的电影。

我在MoviesVC 中有movies:[Movie] 属性。 Movie 类有一个 bookmark = false 标志来确定电影是否被加入书签。当用户单击单元格上的书签按钮时,我将标志更新为true

由于BookmarkedVC 也显示书签电影列表,我继承BookmarkVC: MoviesVC

BookmarkedVCviewWillAppear()方法中,我通过调用下面的函数来获取书签的电影

func loadBookmarkedMovie() -> [Movie] {
    let bookmarkedMovies = self.movies.filter { return $0.bookmark == true }
    return bookmarkedMovies
}

问题是bookmark 中的self.movies 仍然是false,尽管它们被添加了书签。

为了确保,在我为一些电影添加书签后,我在MoviesVC 中调用loadBookmarkedMovie(),它实际上返回了添加书签的电影,但在BookmarkedVC 中它是return nil

【问题讨论】:

  • 您是否确认当您与单元格交互时,您的 MoviesVC 中的书签属性实际上正在发生变化?
  • 我可以假设 movies 在声明时已初始化吗?
  • 是的,属性已更改。我通过在viewWillAppear() 中的数组上调用过滤器方法来检查它
  • @Roy 电影被声明为 ?并从服务器下载电影 json。

标签: ios arrays swift inheritance


【解决方案1】:

由于Inheritance,您只能获得超类的属性(functionsvariables)。

所以如果你继承 MoviesVC 。 .

  1. 现在BookmarkVC 具有movies:[Movie](假设movies 在声明时已初始化)。
  2. 全部bookmark == false(默认false,因为您还没有更新BookmarkVC中的书签)

所以。 . func loadBookmarkedMovie() 肯定会返回 nil 。要将数据从MoviesVC 传递到BookmarkedVC,您只需使用SegueDelegate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2019-05-21
    • 2022-12-11
    相关资源
    最近更新 更多