这个问题来自以下问题: Drag messages from Mail to Dock using Swift
我现在收到了一条拖放消息,将消息从 Mail 拖到 Dock。我唯一得到的是消息标题和消息 URL,如下所示:
消息:%3C2004768713.4671@mail.stackoverflow.com%3E
如何从此 URL 获取正文?
谢谢
安德鲁
这个问题来自以下问题: Drag messages from Mail to Dock using Swift
我现在收到了一条拖放消息,将消息从 Mail 拖到 Dock。我唯一得到的是消息标题和消息 URL,如下所示:
消息:%3C2004768713.4671@mail.stackoverflow.com%3E
如何从此 URL 获取正文?
谢谢
安德鲁
您可以为此使用一个简单的正则表达式。
该.*
参数是饥饿的,并且会尝试在字符串中(希望)最后一个 @ 字符之前尽可能多地匹配 url subject:message 对。
我还包含了一个小工具函数 ( rangeFromNSRange()
) 来帮助将 Objective-CNSRange
结构转换为正确的Range<String.Index>
Swift 结构。
将以下内容粘贴到 Swift Playground 中以查看它的工作情况(并玩得开心!):
import Cocoa
func rangeFromNSRange(range: NSRange, string: String) -> Range<String.Index>
{
let startIndex = string.startIndex.advancedBy(range.location)
let endIndex = startIndex.advancedBy(range.length)
return Range(start: startIndex, end: endIndex)
}
func parseEmailURL(urlAsString url: String) -> (subject: String, message: String)?
{
let regexFormat = "^(.*):(.*)@"
if let regex = try? NSRegularExpression(pattern: regexFormat, options: NSRegularExpressionOptions.CaseInsensitive)
{
let matches = regex.matchesInString(url, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, url.characters.count))
if let match = matches.first
{
let subjectRange = rangeFromNSRange(match.rangeAtIndex(1), string: url)
let messageRange = rangeFromNSRange(match.rangeAtIndex(2), string: url)
let subject = url.substringWithRange(subjectRange)
let message = url.substringWithRange(messageRange)
return (subject, message)
}
}
return nil
}
parseEmailURL(urlAsString: "message:2004768713.4671@mail.stackoverflow.com")