Bird
Raised Fist0
iOS Swiftmobile~5 mins

Repository pattern in iOS Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Repository pattern in mobile app development?
The Repository pattern is a way to organize code that separates data access logic from the rest of the app. It acts like a middleman between the app and data sources, making it easier to manage and test data operations.
Click to reveal answer
beginner
Why use the Repository pattern in an iOS app?
Using the Repository pattern helps keep your app clean and organized. It hides where data comes from (like a database or web service), so the app code doesn’t need to change if the data source changes.
Click to reveal answer
intermediate
In Swift, what does a Repository typically provide?
A Repository usually provides methods to fetch, save, update, or delete data. These methods return data in a simple way, so the rest of the app can use it without worrying about details.
Click to reveal answer
intermediate
How does the Repository pattern improve testing?
Because the Repository hides data sources, you can replace it with a fake or mock version during testing. This lets you test app logic without needing real data or network calls.
Click to reveal answer
beginner
Give a simple example of a Repository interface in Swift.
protocol UserRepository { func fetchUsers() async throws -> [User] func saveUser(_ user: User) async throws }
Click to reveal answer
What is the main role of a Repository in an app?
ATo manage data access and hide data source details
BTo handle user interface layout
CTo manage app navigation
DTo store app settings
Which benefit does the Repository pattern provide for testing?
ASimplifies UI design
BImproves app speed
CAllows replacing data source with mocks
DManages app permissions
In Swift, how do you define a Repository interface?
AUsing an enum with cases
BUsing a protocol with data methods
CUsing a struct with colors
DUsing a class with UI elements
What kind of methods does a Repository usually have?
AFetch, save, update, delete data
BDraw buttons and labels
CHandle user gestures
DManage app lifecycle events
Which of these is NOT a reason to use the Repository pattern?
ATo separate data logic from UI
BTo simplify testing with mocks
CTo make data source changes easier
DTo improve app navigation speed
Explain the Repository pattern and why it is useful in iOS app development.
Think about how your app talks to data and how Repository helps keep that simple.
You got /4 concepts.
    Describe how you would create a simple UserRepository in Swift and what methods it might have.
    Focus on the interface that hides data details from the rest of the app.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of the Repository pattern in iOS Swift development?

      easy
      A. To separate data access logic from the rest of the app
      B. To handle UI animations smoothly
      C. To manage app navigation between screens
      D. To store user interface layout information

      Solution

      1. Step 1: Understand the role of Repository pattern

        The Repository pattern is designed to isolate data access logic from business logic in an app.
      2. Step 2: Identify the correct purpose

        Separating data access makes the app easier to maintain and test, which matches To separate data access logic from the rest of the app.
      3. Final Answer:

        To separate data access logic from the rest of the app -> Option A
      4. Quick Check:

        Repository pattern = separate data access [OK]
      Hint: Repository = data access separation [OK]
      Common Mistakes:
      • Confusing Repository with UI or navigation roles
      • Thinking Repository manages animations
      • Assuming Repository stores UI layout
      2.

      Which of the following is the correct way to declare a repository protocol in Swift?

      ?
      easy
      A. struct UserRepository { func fetchUsers() -> [User] }
      B. class UserRepository { func fetchUsers() -> [User] }
      C. enum UserRepository { func fetchUsers() -> [User] }
      D. protocol UserRepository { func fetchUsers() -> [User] }

      Solution

      1. Step 1: Identify correct Swift syntax for protocols

        Protocols in Swift are declared with the keyword protocol followed by method signatures without bodies.
      2. Step 2: Match the correct declaration

        protocol UserRepository { func fetchUsers() -> [User] } correctly declares a protocol with a method signature. Other options use class, struct, or enum which are not protocols.
      3. Final Answer:

        protocol UserRepository { func fetchUsers() -> [User] } -> Option D
      4. Quick Check:

        Protocol declaration uses protocol keyword [OK]
      Hint: Protocols start with 'protocol' keyword [OK]
      Common Mistakes:
      • Using class or struct instead of protocol for interface
      • Adding method bodies inside protocol
      • Using enum incorrectly for repository
      3.

      Given the following code snippet, what will be printed?

      protocol UserRepository {
        func fetchUsers() -> [String]
      }
      
      class MockUserRepository: UserRepository {
        func fetchUsers() -> [String] {
          return ["Alice", "Bob"]
        }
      }
      
      let repo: UserRepository = MockUserRepository()
      print(repo.fetchUsers())
      medium
      A. []
      B. ["Alice", "Bob"]
      C. nil
      D. Compilation error

      Solution

      1. Step 1: Understand protocol conformance and method implementation

        The class MockUserRepository conforms to UserRepository and implements fetchUsers() returning ["Alice", "Bob"].
      2. Step 2: Analyze the print statement

        The variable repo is typed as UserRepository but holds an instance of MockUserRepository. Calling fetchUsers() returns ["Alice", "Bob"], which is printed.
      3. Final Answer:

        ["Alice", "Bob"] -> Option B
      4. Quick Check:

        Protocol method returns mock data [OK]
      Hint: Protocol variable calls concrete implementation [OK]
      Common Mistakes:
      • Expecting empty array instead of returned data
      • Thinking protocol variable can't call methods
      • Assuming compilation error due to protocol
      4.

      Identify the error in this repository implementation:

      protocol UserRepository {
        func fetchUsers() -> [String]
      }
      
      class UserRepo: UserRepository {
        func fetchUsers() {
          return ["Alice", "Bob"]
        }
      }
      medium
      A. Protocol method has wrong name
      B. Method does not return a value
      C. Missing return type in method signature
      D. Class does not conform to protocol

      Solution

      1. Step 1: Compare protocol and class method signatures

        The protocol method fetchUsers() returns [String]. The class method lacks the return type in its signature.
      2. Step 2: Identify the mismatch causing error

        Because the class method signature does not match the protocol, it causes a compilation error. The method must declare the return type.
      3. Final Answer:

        Missing return type in method signature -> Option C
      4. Quick Check:

        Method signatures must match protocol [OK]
      Hint: Method signature must match protocol exactly [OK]
      Common Mistakes:
      • Forgetting to add return type in implementation
      • Assuming method name mismatch
      • Thinking protocol conformance is automatic
      5.

      You want to switch your data source from a local database to a remote API without changing your app's business logic. How does the Repository pattern help you achieve this?

      hard
      A. By defining a repository interface and implementing separate classes for each data source
      B. By embedding API calls directly in the UI code
      C. By storing all data in global variables accessible everywhere
      D. By using a single class that mixes local and remote data fetching

      Solution

      1. Step 1: Understand the role of repository interface

        The Repository pattern uses an interface (protocol) to abstract data access methods.
      2. Step 2: Implement separate classes for each data source

        You create one class for local database access and another for remote API, both conforming to the same interface. This allows switching without changing business logic.
      3. Final Answer:

        By defining a repository interface and implementing separate classes for each data source -> Option A
      4. Quick Check:

        Interface + multiple implementations = easy data source switch [OK]
      Hint: Use interface + multiple classes for data sources [OK]
      Common Mistakes:
      • Mixing data fetching code in UI layer
      • Using global variables for data access
      • Combining local and remote logic in one class
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard