---
title: ObservableObject
framework: combine
role: symbol
role_heading: Protocol
path: combine/observableobject
---

# ObservableObject

A type of object with a publisher that emits before the object has changed.

## Declaration

```swift
protocol ObservableObject : AnyObject
```

## Overview

Overview By default an ObservableObject synthesizes an objectWillChange publisher that emits the changed value before any of its @Published properties changes. class Contact: ObservableObject {     @Published var name: String     @Published var age: Int

init(name: String, age: Int) {         self.name = name         self.age = age     }

func haveBirthday() -> Int {         age += 1         return age     } }

let john = Contact(name: "John Appleseed", age: 24) cancellable = john.objectWillChange     .sink { _ in         print("\(john.age) will change") } print(john.haveBirthday()) // Prints "24 will change" // Prints "25"

## Topics

### Publishing changes

- [objectWillChange](combine/observableobject/objectwillchange.md)
- [ObjectWillChangePublisher](combine/observableobject/objectwillchangepublisher.md)

## See Also

### Observable Objects

- [ObservableObjectPublisher](combine/observableobjectpublisher.md)
