---
title: "init(request:cachedResponse:client:)"
framework: foundation
role: symbol
role_heading: Initializer
path: "foundation/urlprotocol/init(request:cachedresponse:client:)"
---

# init(request:cachedResponse:client:)

Creates a URL protocol instance to handle the request.

## Declaration

```swift
init(request: URLRequest, cachedResponse: CachedURLResponse?, client: (any URLProtocolClient)?)
```

## Parameters

- `request`: The URL request for the URL protocol object. This request is retained.
- `cachedResponse`: A cached response for the request; it may be nil if there is no existing cached response for the request.
- `client`: An object that provides an implementation of the doc://com.apple.foundation/documentation/Foundation/URLProtocolClient protocol that this instance uses to communicate with the URL Loading System. This client object is retained.

## Return Value

Return Value The initialized protocol object.

## Discussion

Discussion Subclasses should override this method to do any custom initialization. Don’t call this method explicitly. When you register your custom protocol class, the system will initialize instances of your protocol as needed. This is the designated initializer for URLProtocol.

## See Also

### Creating protocol objects

- [init(task:cachedResponse:client:)](foundation/urlprotocol/init(task:cachedresponse:client:).md)
