struct - Swift 中变异函数的实例结构变量

标签 struct swift2

当 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/

相关文章:

ios - 在我的应用程序中自定义 Decimal pad

swift - 实现符合 Hashable 协议(protocol)的通用结构。错误 : Refernce to generic type 'strA' requires arguments in <. ..> 错误

ios - 无法将时间 'Int' 的值转换为 Swift 2 中的预期参数类型 'NSPropertyListReadOptions'

C语言 : Referencing char arrays in nested struct

arrays - Swift - 将数据加载到结构数组中

c - 在结构中嵌入数组

ios - 加速计在第一款游戏中有效,但在第二款游戏中变得疯狂

swift - 将具有多个泛型类型的枚举作为参数传递

c++ - 结构对齐不适用于#pragma pack

struct - 如何从元组结构中提取值?