最近试着用Swift写一个Markdown解析器(
https://github.com/skyline75489/Annie ) ,需要大量地使用正则以及字符串处理,Swift需要调用NSRegularExpression来做正则,本身对于字符串的处理又极其不友好。
Python的一个re.match,用Swift写是这样的:
let md:String = "# Hello"
if let re = NSRegularExpression(pattern: "^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)", options: NSRegularExpressionOptions.CaseInsensitive, error: nil) {
let matches = re.matchesInString(md, options: NSMatchingOptions.ReportProgress, range: NSMakeRange(0, countElements(md)))
for match in matches {
let range = match.rangeAtIndex(1)
let start = advance(md.startIndex, range.location)
let end = advance(start, range.length)
let r = md.substringWithRange(Range<String.Index>(start: start, end: end))
println(r)
}
}
为了模拟Python里的text = text[len:],需要这么写:
text.removeRange(Range<String.Index>(start: text.startIndex, end: advance(text.startIndex,length)))
苍天有眼啊。。。这哪是人类能使用的语言。。。
写了半天的结论就是,现在Swift还是不够成熟,Xcode经常写着写着SourceKit就崩溃。我还是挺喜欢Swift这个语言的,希望苹果能继续努力啊,不要让广大开发者失望。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/160759
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.