【Swift 3】煩わしいString操作を簡単にする
Stringの操作についてObj-C時代から使い慣れているNSStringと比べ、随分使い勝手が悪いなーと感じることが多いです。
Qiitaになぜそうなっているのかという詳しい解説がありますが、使う上で不便なことには変わりないので、Extensionを書きました。
コード
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) } }
NSRange
→ Range<String.Index>
の変換を行っている部分ですがStack Overflowから頂きました。
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 } }