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

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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
}

参考

NSDataDetector Class Reference
https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSDataDetector_Class/index.html

Regex in Swift
http://benscheirman.com/2014/06/regex-in-swift/