---
title: AssignableDocument
framework: Assignables
role: symbol
role_heading: Structure
platforms: [iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+]
path: assignables/assignabledocument
---

# AssignableDocument

An assignable document is an augmented PDF that allows teachers to mark up the PDF with the intention of students taking the assessment.

## Declaration

```swift
struct AssignableDocument
```

## Overview

Overview The document has several parts, which includes the ability to modify the PDF, annotate the PDF, and define question regions in the PDF. To add a question to this assignable, you can use appendQuestion(pageID:rect:maxScore:) which will take care of associating a box to a page and adding a question connected to that box to the document. This document is fully mergeable, which means that any copies of this document that are independently mutated can be merged into a determinisitic resulting document. You can merge copies of this document into this one using merge(_:). You can also merge individual parts of copies of this document into this one with merge(partData:into:). For example, if deviceA has documentA and deviceB has documentB, which is a copy of documentA. When a user changes a question in documentB on deviceB, deviceB can export that part’s data and send it to deviceA to be merged back into documentA. You can create as many of these objects as you have memory for. This type assumes single-threaded access.

## Topics

### Creating an assignable document

- [init(pdfURL:id:)](assignables/assignabledocument/init(pdfurl:id:).md)
- [init(id:partData:)](assignables/assignabledocument/init(id:partdata:)-8gf6g.md)
- [MergeablePartData](assignables/mergeablepartdata.md)
- [init(id:partData:)](assignables/assignabledocument/init(id:partdata:)-4am19.md)
- [init(pdfURL:authors:id:)](assignables/assignabledocument/init(pdfurl:authors:id:).md)

### Inspecting an assignable document

- [AssignableDocument.ID](assignables/assignabledocument/id-swift.typealias.md)
- [id](assignables/assignabledocument/id-swift.property.md)
- [isMultiPageDocument](assignables/assignabledocument/ismultipagedocument.md)
- [isPartial](assignables/assignabledocument/ispartial.md)
- [AssignableDocument.PartIDs](assignables/assignabledocument/partids-swift.enum.md)
- [partIDs](assignables/assignabledocument/partids-swift.property.md)
- [AssignableDocument.Question](assignables/assignabledocument/question.md)
- [AssignableDocument.QuestionBox](assignables/assignabledocument/questionbox.md)
- [questions](assignables/assignabledocument/questions.md)
- [AssignableDocument.Element](assignables/assignabledocument/element.md)
- [pagesDebugDescription](assignables/assignabledocument/pagesdebugdescription.md)
- [AssignableDocument.Error](assignables/assignabledocument/error.md)

### Getting and setting the questions

- [appendQuestion(pageID:rect:maxScore:)](assignables/assignabledocument/appendquestion(pageid:rect:maxscore:).md)
- [questions(on:)](assignables/assignabledocument/questions(on:).md)
- [removeQuestion(_:)](assignables/assignabledocument/removequestion(_:).md)

### Computing the max score

- [computeMaxScore(defaultQuestionMaxScore:)](assignables/assignabledocument/computemaxscore(defaultquestionmaxscore:).md)

### Getting the authors

- [authors](assignables/assignabledocument/authors.md)

### Getting the configuration

- [AssignableDocument.Configuration](assignables/assignabledocument/configuration-swift.typealias.md)
- [configuration](assignables/assignabledocument/configuration-swift.property.md)
- [AssignableDocument.CorrectMarkType](assignables/assignabledocument/correctmarktype.md)

### Merging the parts

- [merge(_:)](assignables/assignabledocument/merge(_:).md)
- [merge(partData:into:)](assignables/assignabledocument/merge(partdata:into:).md)
- [merge(other:)](assignables/assignabledocument/merge(other:).md)
- [merge(partID:partDataURL:)](assignables/assignabledocument/merge(partid:partdataurl:).md)

### Producing thumbnails

- [questionThumbnails(visibleParts:)](assignables/assignabledocument/questionthumbnails(visibleparts:).md)

### Making the parts

- [makePart(for:)](assignables/assignabledocument/makepart(for:).md)

### Exporting the parts

- [exportBaseAsPDF()](assignables/assignabledocument/exportbaseaspdf().md)
- [exportParts(identifiedBy:)](assignables/assignabledocument/exportparts(identifiedby:).md)
- [export(partIDs:)](assignables/assignabledocument/export(partids:).md)

### Accessing documents

- [subscript(_:)](assignables/assignabledocument/subscript(_:)-8ou91.md)
- [subscript(_:)](assignables/assignabledocument/subscript(_:)-68enn.md)
- [subscript(_:)](assignables/assignabledocument/subscript(_:)-7fijz.md)

### Comparing assignable documents

- [==(_:_:)](assignables/assignabledocument/==(_:_:).md)

### Hashing the assignable document

- [hash(into:)](assignables/assignabledocument/hash(into:).md)

### Default Implementations

- [Assignable Implementations](assignables/assignabledocument/assignable-implementations.md)
- [MergeableDocument Implementations](assignables/assignabledocument/mergeabledocument-implementations.md)

## Relationships

### Conforms To

- [Assignable](assignables/assignable.md)
- [Copyable](swift/copyable.md)
- [Equatable](swift/equatable.md)
- [Escapable](swift/escapable.md)
- [Hashable](swift/hashable.md)
- [Identifiable](swift/identifiable.md)
- [MergeableDocument](assignables/mergeabledocument.md)
- [MergeablePartsContainer](assignables/mergeablepartscontainer.md)

## See Also

### Assignable document

- [AssignedWorkDocument](assignables/assignedworkdocument.md)
- [Assignable](assignables/assignable.md)
