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)