Returns an initialized URL connection and begins to load the data for the URL request.


init?(request: URLRequest, delegate: Any?)



The URL request to load. The request object is deep-copied as part of the initialization process. Changes made to request after this method returns do not affect the request that is used for the loading process.


The delegate object for the connection. The connection calls methods on this delegate as the load progresses. Delegate methods are called on the same thread that called this method. By default, for the connection to work correctly, the calling thread’s run loop must be operating in the default run loop mode. See schedule(in:forMode:) to change the run loop and mode.

Return Value

The URL connection for the URL request. Returns nil if a connection can't be initialized.


This is equivalent to calling init(request:delegate:startImmediately:) and passing true for startImmediately.

Special Considerations

During the download the connection maintains a strong reference to the delegate. It releases that strong reference when the connection finishes loading, fails, or is canceled.

See Also

Loading Data Asynchronously

init?(request: URLRequest, delegate: Any?, startImmediately: Bool)

Returns an initialized URL connection and begins to load the data for the URL request, if specified.

class func sendAsynchronousRequest(URLRequest, queue: OperationQueue, completionHandler: (URLResponse?, Data?, Error?) -> Void)

Loads the data for a URL request and executes a handler block on an operation queue when the request completes or fails.

func start()

Causes the connection to begin loading data, if it has not already.