Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Swift中的邮件URL获取正文文本_Swift_Url_Message_Apple Mail - Fatal编程技术网

从Swift中的邮件URL获取正文文本

从Swift中的邮件URL获取正文文本,swift,url,message,apple-mail,Swift,Url,Message,Apple Mail,本问题是问题的后续部分: 我现在收到了一条拖放消息,它是通过将消息从Mail拖到dock来实现的。我得到的唯一信息是消息标题和消息URL,如下所示: 消息:%3C2004768713。4671@mail.stackoverflow.com%3E 如何从该URL获取正文文本 谢谢 Andrew您可以使用一个简单的正则表达式 *参数很饿,将尝试在字符串中最后一个@字符之前尽可能多地匹配url主题:消息对 我还提供了一个小的工具函数(rangeFromNSRange()),用于帮助将Objectiv

本问题是问题的后续部分:

我现在收到了一条拖放消息,它是通过将消息从Mail拖到dock来实现的。我得到的唯一信息是消息标题和消息URL,如下所示:

消息:%3C2004768713。4671@mail.stackoverflow.com%3E

如何从该URL获取正文文本

谢谢


Andrew

您可以使用一个简单的正则表达式

*
参数很饿,将尝试在字符串中最后一个@字符之前尽可能多地匹配url主题:消息对

我还提供了一个小的工具函数(
rangeFromNSRange()
),用于帮助将Objective-C
NSRange
结构转换为适当的
范围
Swift结构

将以下内容粘贴到Swift游乐场中,以查看其工作情况(并享受乐趣!):

导入可可粉
func rangeFromNSRange(范围:NSRange,字符串:string)->range
{
让startIndex=string.startIndex.advancedBy(range.location)
让endIndex=startIndex.advancedBy(range.length)
返回范围(开始:开始索引,结束:结束索引)
}
func parseEmailURL(urlAsString url:String)->(主题:String,消息:String)?
{
让regexFormat=“^(.*):(.*)@”
如果让regex=try?NSRegularExpression(模式:regexFormat,选项:NSRegularExpressionOptions.case不区分大小写)
{
让matches=regex.matchesisnstring(url,选项:NSMatchingOptions(rawValue:0),范围:NSMakeRange(0,url.characters.count))
如果让match=matches.first
{
让subjectRange=rangeFromNSRange(match.RangeAtinex(1),字符串:url)
让messageRange=rangeFromNSRange(match.RangeAtinex(2),字符串:url)
让subject=url.substringWithRange(subjectRange)
让message=url.substringWithRange(messageRange)
返回(主题、消息)
}
}
归零
}
parseEmailURL(urlAsString:“消息:2004768713。4671@mail.stackoverflow.com")

谢谢你的帮助,但我不是这个意思。我想要的是来自实际消息的文本,而不是来自URL,这有点棘手。
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")