Here's a concrete solution for Swift 3.0+ based on the accepted answer. Note that, like the accepted answer, this is known to work only on the iOS Mail app and not necessarily other apps.
Implementation:
class MessageWithSubject: NSObject, UIActivityItemSource { let subject:String let message:String init(subject: String, message: String) { self.subject = subject self.message = message super.init() } func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { return message } func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? { return message } func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String { return subject } }
Usage:
Here's an example of usage. Note that it works well to use this as the first item in the activityItems array, and include any additional items to follow:
let message = MessageWithSubject(subject: "Here is the subject", message: "An introductory message") let itemsToShare:[Any] = [ message, image, url, etc ] let controller = UIActivityViewController(activityItems: itemsToShare, applicationActivities: nil)