# live

The live() method for the SurrealDB Swift SDK subscribes to changes via a live query.

Subscribes to changes on a table and returns an `AsyncStream<LiveEvent<T>>` of events.

> [!IMPORTANT]
> Live queries require the [WebSocket client](/docs/reference/swift/concepts/connecting.md#websocket-client).

```swift title="Method Syntax"
try await client.live(query)
```

## Arguments

<table>
    <thead>
        <tr>
            <th colspan="2" scope="col">Arguments</th>
            <th colspan="2" scope="col">Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td colspan="2" scope="row" data-label="Arguments">
                <code>query</code>
                <label label="required" />
            </td>
            <td colspan="2" scope="row" data-label="Description">
                A live query built with <code>SurrealDSL.live(_:)</code> or the <code>#live</code> macro.
            </td>
        </tr>
    </tbody>
</table>

## Example usage

```swift
let stream = try await client.live(SurrealDSL.live(Person.self))

for await event in stream {
    switch event.action {
    case .create:
        print("Created:", event.decoded as Any)
    case .update:
        print("Updated:", event.decoded as Any)
    case .delete:
        print("Deleted record:", event.recordID)
    case .killed:
        print("Live query was killed")
    }
}
```

See [Live queries](/docs/reference/swift/concepts/live-queries.md) for a full walkthrough, and [`kill`](/docs/reference/swift/methods/kill.md) to stop a subscription.
