読者です 読者をやめる 読者になる 読者になる

あたも開発ブログ

セットジャパンコーポレーションの社員が運営しています。

【Swift 3】煩わしいString操作を簡単にする

Stringの操作についてObj-C時代から使い慣れているNSStringと比べ、随分使い勝手が悪いなーと感じることが多いです。

Qiitaになぜそうなっているのかという詳しい解説がありますが、使う上で不便なことには変わりないので、Extensionを書きました。

qiita.com

コード

extension String {
    func substring(to index: Int) -> String {
        return substring(to: self.index(self.startIndex, offsetBy: abs(index)))
    }
    func substring(from index: Int) -> String {
        return substring(from: self.index(self.endIndex, offsetBy: -abs(index)))
    }
    func substring(with range: NSRange) -> String {
        return substring(with: self.range(from: range)!)
    }
    func replacingCharacters(in range: NSRange, with text: String) -> String {
        return self.replacingCharacters(in: self.range(from: range)!, with: text)
    }
}

NSRangeRange<String.Index>の変換を行っている部分ですがStack Overflowから頂きました。

stackoverflow.com

extension String {
    func range(from nsRange: NSRange) -> Range<String.Index>? {
        guard let from16 = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex),
            let to16 = utf16.index(from16, offsetBy: nsRange.length, limitedBy: utf16.endIndex),
            let from = from16.samePosition(in: self),
            let to = to16.samePosition(in: self)
            else { return nil }
        return from ..< to
    }
}