Reputation: 51
I am currently working on my first bigger project and I was wondering whether there is some way of putting data into one class and then just rewriting them or making an instance for the class. I have got a data that are being downloaded in the first ViewController and if I want to use them on all of my 5 ViewControllers, I just pass them using delegates and make a lot of duplicates. As this way is very inefficient and also messy, I would like to have them stored in one class. When I made custom class for those data, when changing to another ViewController, the data get instantly deleted.
Upvotes: 2
Views: 848
Reputation: 641
You have multiple options to access the same piece of data from multiple places. The way you use fully depends on your needs. Here are a few options:
Dependency injection: Here is a nice post about it. This is having some data in one VC and injecting it to the next one. It's a good approach if you don't need to persist that data and other objects depend on it.
Delegation: You can make a VC pass data to its delegate after something happens (like a user tap, you finished downloading some data, etc).
Notification Center: You can send notification within the app scope and make any object (like a ViewController) to observe for specific notifications. You can send data along with a notifications.
Singleton design pattern: You can use singletons in Swift like this:
class MySingleton {
static let shared = MySingleton()
var name = ""
}
// Assign name variable somewhere (i.e. in your first VC after downloading data)
MySingleton.shared.name = "Bob"
// In some other ViewController
myLabel.text = MySingleton.shared.name
UserDefaults: This is a storage you can use to store small pieces of data. Keep in mind that this is not a database, it will persist your data between app launches, but you should not use it to store large amounts of data.
CoreData: This is a a persistence framework for iOS to store data, like you would do in a server-side DB. It's not exactly a DB, because you don't access disk directly each time you read/write, CoreData loads all its content to memory to access it. You have other third party libraries to work with local persistency, like Realm.
Hope it helps!
Upvotes: 3