我是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
}
}
现在我想从一些viewControllers访问这个singleton类的全局变量。当我在xcode中输入时:
Global.SharedGlobal.
我有两个选项,一个是数组成员,另一个是 testString 。结构信息不可用。但是,如果我只输入
Global.
然后我看到 Global.Info 和 Global.SharedGlobal 作为我的选项。
为什么我无法访问我的单例类中的结构(即Global.SharedGlobal.Info)?我错过了什么?我感谢任何反馈或帮助。非常感谢。
答案 0 :(得分:9)
除非有非常具体的理由,否则你不需要像这样嵌套课程。
让我们简化一下练习的代码:
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)
现在对我有意义。一个结构,包含一些用户的信息,我可以创建它们的任何数字实例 - 和一个单独的类,唯一的,我可以存储这些信息实例,这个单例可以在任何地方使用。
这是你想要达到的目标吗?