2015/07/01

Swiftでリンク検出(標準APIで検出する場合とカスタムクラスの2パターン)

実現方法

①正規表現書かなくていい場合
NSDataDetectorでリンク検出
let msg:NSString = "http://hoge.com"
let dataDetector =  NSDataDetector(types:NSTextCheckingType.Link.rawValue, error: nil)

let resultArray:NSArray = dataDetector?.matchesInString(msg as String!, options: nil, range: NSMakeRange(0, msg.length)) as NSArray!

for result in resultArray {
    if result.resultType == NSTextCheckingType.Link {
        var url:NSURL! = result.URL!
        linkExist = true
    }
}
②自前で用意する場合
class Regex {
    let internalExpression: NSRegularExpression
    let pattern: String

    init(_ pattern: String) {
        self.pattern = pattern
        var error: NSError?
        self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)!
    }

    func test(input: String) -> Bool {
        let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, count(input)))
        return matches.count > 0
    }
}

if Regex("^https?://.*").test("http://hoge.com") {  
    // linkExist
}

参考