我正在开发一个可扩展的表视图并遇到了一些问题。
这适用于测试:
var sections = [
ExpandTVSection(genre: "genre1", movies: ["movie1A", "movie1B","movie1C"], expanded: false),
ExpandTVSection(genre: "genre2", movies: ["movie2A", "movie2B","movie2C"], expanded: false),
ExpandTVSection(genre: "genre3", movies: ["movie3A", "movie3B","movie3C"], expanded: false)
]
我从Firebase获取数据,所以我尝试设置第一个电影名称
var movies1 = [String]()
var movies2 = [String]()
var movies3 = [String]()
func fetchMovies(){
var datref: DatabaseReference!
datref = Database.database().reference()
datref.child("movies1").child("names").observe(
.childAdded,
with: {
(snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
let movie = MoviesInfo(dictionary: dictionary)
movie.setValuesForKeys(dictionary)
self.movies1.append(movie.Name!)
}
},
withCancel: nil)
}
// !! program breaks here due to movies1 !!
var sections = [
ExpandTVSection(genre: "genre1", movies: movies1, expanded: false),
ExpandTVSection(genre: "genre2", movies: ["movie2A", "movie2B","movie2C"], expanded: false),
ExpandTVSection(genre: "genre3", movies: ["movie3A", "movie3B","movie3C"], expanded: false)
]
一旦我尝试应用它,我的程序崩溃了:
无法在属性初始值设定项中使用实例成员'movies1', 属性初始化程序在'self'可用之前运行
更多可能有用的信息:
struct ExpandTVSection {
var genre: String!
var movies: [String]!
var expanded: Bool!
init(genre: String, movies: [String], expanded: Bool) {
self.genre = genre
self.movies = movies
self.expanded = expanded
}
}
答案 0 :(得分:1)
Swift不允许您在另一个属性(movies1
)的初始化表达式中使用属性(sections
)。相反,您可以在初始化程序中初始化属性(在调用超类初始化程序之后),或者在您的情况下执行:
ExpandTVSection(genre: "genre1", movies: [], expanded: false)
而不是
ExpandTVSection(genre: "genre1", movies: movies1, expanded: false)
由于您的movies1
初始化为空数组。