在struct或其他方法中全局存储数组

时间:2017-01-10 09:46:24

标签: ios arrays swift struct global

我有一个struct元素数组,我想要全局存储,以便我可以在不同的类中访问它,而不必运行一遍又一遍地填充它的查询。

我有一个结构:

struct collectionStruct {
    var name : String
    var description : String
    var title : String
    var image : PFFile
    var id: String
}

和变量:

var collectionArray = [collectionStruct]()

以及构建数组的一些代码:

for object in items {

                let arrayName = object.object(forKey: fromName) as! String
                let arrayDescription = object.object(forKey: fromDescription) as! String
                let arrayTitle = object.object(forKey: fromTitle) as! String
                let arrayImage = object.object(forKey: fromImage) as! PFFile
                let arrayID = object.objectId as String!

                collectionArray.append(collectionStruct(name: arrayName,
                                                            description: arrayDescription,
                                                                title: arrayTitle,
                                                                    image: arrayImage,
                                                                        id: arrayID!))
            }

我正在考虑创建另一个结构来保存数组本身有点丢失。这就是我的想法:

struct globalArray {

var collectionArray = [collectionStruct]()

}

但可能有点离开

3 个答案:

答案 0 :(得分:2)

您可以将singleton用于可以从任何地方访问的全局类:

class GlobalArray {
   static let shared = GlobalArray()
   var collectionArray = [collectionStruct]()
}

并像这样访问以分配或读取值:

GlobalArray.shared.collectionArray

答案 1 :(得分:1)

你可以宣布

var collectionArray = [collectionStruct]()

位于任何文件的顶层(任何对象之外),并且全局可用

e.g。

var collectionArray = [collectionStruct]()

class MyClass {
    func printArray() {
        print(collectionArray)
    }
}

答案 2 :(得分:1)

您应该考虑命名结构CollectionStruct而不是collectionStruct - 因为它表明它是一种类型。要在任何地方访问数组,您可以创建单例。使用单例,您可以通过为其提供私有构造函数来确保只有一个实例可用。这是一个例子:

class Global {
    private init() { }
    static let sharedInstance = Global()
    var collection = [CollectionStruct]()
}

要使用它,您将使用以下内容:

Global.sharedInstance.collection