当前位置: 首页 > 知识库问答 >
问题:

如何在swift 2.0(iOS)的单例类中创建全局可访问的结构数据?

皇甫建木
2023-03-14

我对iOS编程和swift非常陌生。我试图创建一个单独的类来存储我的全局数据。我的全局数据是一个结构和这个结构的数组。我希望这个类只有一个实例,因此是一个单例类。所有ViewControllers都应该可以访问和编辑全局数据。我一直在四处寻找,除了最后一个部分,我几乎已经搞清楚了。下面是单例类:

    import Foundations
    class Global {

     struct Info {
      var firstname:String!
      var lastname:String!
      var status:String!

      init (firstname:String, lastname:String, status:String)
       {
        self.firstname=firstname
        self.lastname=lastname
        self.status=status
       }
    }

   var testString: String="Test" //for debugging
   var member:[Info]=[]

    class var SharedGlobal:Global
     {
      struct Static 
      {static let instance = Global()}
      return Static.instance
     }
    }

现在我想从一些视图控制器访问这个单例类的全局变量。当我在 xcode 中键入此内容时:

    Global.SharedGlobal.

我有两个选项,一个是数组成员,另一个是testString。struct Info不可用。但是,如果我只是键入

    Global.

然后我看到全球。信息和全球。共享全球作为我的选项。

为什么我不能访问我的单例类中的结构(例如,全局。SharedGlobal.Info)?我错过了什么?我感谢任何反馈或帮助。提前多谢了。

共有1个答案

叶冥夜
2023-03-14

除非有非常具体的原因,否则您不需要这样嵌套类。

让我们简化一下练习的代码:

struct Info {
    // No need for these properties to be Implicitly Unwrapped Optionals since you initialize all of them
    var firstname: String
    var lastname: String
    var status: String

    init (firstname:String, lastname:String, status:String) {
        self.firstname=firstname
        self.lastname=lastname
        self.status=status
    }
}

class Global {

    // Now Global.sharedGlobal is your singleton, no need to use nested or other classes
    static let sharedGlobal = Global()

    var testString: String="Test" //for debugging

    var member:[Info] = []

}


// Use the singleton like this
let singleton = Global.sharedGlobal

// Let's create an instance of the info struct
let infoJane = Info(firstname: "Jane", lastname: "Doe", status: "some status")

// Add the struct instance to your array in the singleton
singleton.member.append(infoJane)

现在它对我来说是有意义的。一个包含一些用户信息的结构,我可以创建任意数量的用户实例,还有一个唯一的单例类,如果我可以存储这些信息实例,这个单例可以在任何地方使用。

这是你想要实现的那种事情吗?

 类似资料:
  • 问题内容: 我有这个: 我如何才能实际修改全局变量g_c? 问题答案: 通过在访问它的函数中声明它: 在Python文档说这个,有关声明: 全局语句是一个声明,适用于整个当前代码块。

  • 我想让 data 是全局变量方便调用而不是在函数中传来传去,但 const 和 static 关键字好像都不支持。有什么好办法吗?

  • 问题内容: 我是Java的新手,我试图找到一种方法来在C语言中存储诸如结构之类的信息。例如,说我想让一名程序雇用员工。它将从用户那里获得一个名字,姓氏和ID号并将其存储起来。然后,用户可以根据条件查看该信息(例如,如果数据库有多于1名员工)。有没有人建议这样做的最佳方法? 问题答案: C中的结构就像Java中的类一样,功能更强大,因为Java中的类可以包含方法,而C ++可以。您创建一个新类。例如

  • 如何合并数组中的所有结构并生成合并的结构? 例如,使用SparkSQL,我能够读取源json文件并生成数组类型的列,数组中的每个元素都包含一个键:值对。例如,假设我们有一个ArrayType列的值,该列的名称为,值为: 我需要将这个数组类型的列转换为结构类型,其值为{a:1,b:2,c:3}。 由于我是通过读取JSON文件获得模式的,所以我可以使用派生序号获得结果,如: 这个解决方案的问题是,如果

  • 问题内容: 好的,所以我使用Jekyll建立了一个博客,您可以在文件中定义变量,所有模板/布局均可访问该变量。我目前正在使用带有EJS模板和ejs- locals的 Node.JS / Express(用于局部 /布局。我正在寻找与全局变量类似的方法,如果有人熟悉Jekyll ,就会发现这些变量。我有像网站的标题(而不是页面标题),作者/公司名称,在我所有页面上都保持不变。 这是我目前正在做的一个

  • 问题内容: 我正在尝试在文件中创建如下。 问题是我发现了问题 类型“配置”没有成员“窗口” 请让我知道如何解决该问题。 问题答案: 表示该类中有一个对象,事实并非如此。 您将需要与with 一起使用,但这无济于事,因为此窗口实际上并不代表任何现有的窗口,而且它也不是视图控制器。 因此,我建议您将要使用的实际视图控制器传递给该方法: 然后从可使用UIViewController对象的类中调用它。