这是我第一次实现单例在swift中共享对象的实例。除了当我尝试将一个元素添加到一个存在于我的单例对象中的数组(从另一个类访问)时,所有东西似乎都工作得很好。它确实根本不会将任何对象附加到数组中。我认为它会附加到一个数组上,但不是我想要的类的同一个实例(因为我只需要一个且只有一个实例)。但是,如果我从类的init()将元素追加到数组上,一切正常。这里有一些代码(我已经简化了所有类以使事情变得更加明显):
文件1:
class Brew: NSObject {
var method = Method()
//Singleton variable
private static var currentBrew: Brew?
//Method to get the current (and only) brew object
static func getCurrentBrew() -> Brew {
if currentBrew == nil {
currentBrew = Brew()
}
return currentBrew!
}
}
struct Method {
var chemex = Device()
init() {
//If I append here - everything works fine
//chemex.instructions.append = (Instruction(title: "Prepare", direction: "Prewet & Heat", time: 3, water: 0))
}
}
struct Device {
var instructions = [Instruction]()
init() {
instructions.append(Instruction(title: "None", direction: "None", time: 1, water: 0, index: 0))
}
文件2 :(我想附加到指令数组中)
let brew = Brew.getCurrentBrew() //How i'm accessing the object
//I'm calling this method from viewDidLoad to set up the array
func setupBrewDevices() {
//This is the line that does not actually append to the singleton instance
brew.method.chemex.instructions.append(Instruction(title: "Extraction", direction: "Match water.", time: 8 , water: 25))
只是旁注,我还尝试创建一个方法,将一条指令附加到同一类内部的数组中,但结果相同。希望这很清楚 - 我感谢任何帮助!
谢谢, 科尔
答案 0 :(得分:1)
有一种更好的方法可以在Swift中创建单例实例。
class Brew: NSObject {
static let currentBrew = Brew()
var method = Method()
}
这是线程安全的,并且避免使用可选项。
那就是说,当我尝试你的代码时,指令数组最终得到了两个像我期望的那样的元素(“None”)和(“Extraction”)。问题可能在于您的代码中的其他地方。