【问题标题】:Store array globally in struct or other method将数组全局存储在结构或其他方法中
【发布时间】:2017-01-10 09:46:24
【问题描述】:

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

我有一个结构:

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]()

}

但可能还有很长的路要走

【问题讨论】:

    标签: ios arrays swift struct global


    【解决方案1】:

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

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

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

    Global.sharedInstance.collection
    

    【讨论】:

      【解决方案2】:

      您可以将单例用于能够从任何地方访问的全局类:

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

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

      GlobalArray.shared.collectionArray

      【讨论】:

        【解决方案3】:

        你可以声明

        var collectionArray = [collectionStruct]()
        

        在任何文件的顶层(在任何对象之外),它将在全局范围内可用

        例如

        var collectionArray = [collectionStruct]()
        
        class MyClass {
            func printArray() {
                print(collectionArray)
            }
        }
        

        【讨论】:

        • 谢谢。我试图让自己变得困难。
        猜你喜欢
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 2021-09-04
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多