当 swift Structure 具有变异功能时,我在使用它们时遇到了麻烦。在此示例中,我有一个 MediaManager 来获取一些数据,将它们存储到其实例变量中,并在重新加载 UI 时调用完成操作。
public struct MediaManager {
//var store = MovieStore()
var movies = [String]()
mutating func fetchMovies(completion: (() -> Void) ) -> Void {
// fetch movies
NSOperationQueue.mainQueue().addOperationWithBlock() {
self.movies = ["Ant Man", "Batman"]
print("Movies in store \(self.movies)")
print("Movies in manager \(mediaManager.allMovies())")
completion()
}
}
public func allMovies() -> [String] {
return movies
}
}
问题是 allMovies()
为空。
输出为
Movies in store ["Ant Man", "Batman"]
Movies in manager []
我可以使用类而不是结构体,但我的理解是结构体应该优先于 swift 中的类。对此正确的解决方案是什么?
干杯, 一月
最佳答案
那里有一个闭包,因此必须捕获闭包使用的每个变量,包括 self
。然而,self 是一个值类型(结构),因此捕获意味着复制值。当执行闭包时,movies
将设置在该结构的本地副本上。
使用类(引用类型)。值类型绝不优于引用类型。两者都有其用途。您已经找到了需要引用类型的用例。
关于struct - Swift 中变异函数的实例结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252444/