SwiftUI: Using CoreData
Don’t forget this!
Difficulty: Beginner | Easy | Normal | Challenging
This article has been developed using Xcode 12, and Swift 5.3
In order to develop a new SwiftUI project that uses Core Data you will need to open Xcode, perhaps press
⌘n but certainly remember to press the rather friendly Core Data tick box.
I have been a cheerleader for a modular Core Data Approach — this means that it should be trestable. Apple have created their Core Data template, and this seems to suggest that the Core Data reaches right into the views in SwiftUI.
To that? I say there must be a testable way. However, I’m still going to use the
Persistence.swift file (so this article may age badly as the template changes.
These tests are in no way complete. In fact, testing saving and the number of objects we have after that operation isn’t ideal. However, this is a basis of how we might test a DataManager module and we can test that in a modular fashion.
Remember: I’m not saying that the
DataManager in terms of testing is perfect, but it a nudge in the right direction.
Actually that is true of the main data manager; I’m not comfortable with my naming of
objectArray either, but this is a pointer in the right direction rather than complete production-ready code.
Oh yes, don’t leave print logs in your code like that if it is for production use (and perhaps deal with errors in a professional way to).
Linking to SwiftUI:
This is where the work is done. This means that we are going to inject the data manager (so mocking is possible, although here I can use the preview data in the persistence controller):
The content view will be reasonably familiar for those who have previously used [SwiftUI](), with the data presented in a List, as you can see in the code below:
Then you can choose to
⌘U to run the tests and, well they are all ✅. The mark of a successful project? Well, in this case the tests are there for you to improve and to work on and get sufficient coverage to make this a production project, so in my opinion this comes under a “good start”.
Want to look at the whole thing? This Repo has the whole network manager, which some will find easier to follow along with.
This project isn’t (yet) production-ready, but it is a good start and is something for you to work on and think about how to make your projects better. SwiftUI isn’t scary, and I hope this demonstration has gone some way to give you some direction in your own coding.
Thanks for reading!
If you’ve any questions, comments or suggestions please hit me up on Twitter