Rearrange is a collection of utilities for making it easier to work with NSRange and NSTextRange. It’s particularly handy when used with the Cocoa text system.
This is a struct that encapsulates a single change to an NSRange. It’s useful for serializing, queuing, or otherwise storing changes and applying them.
You can also use this class to tranform individual points or other NSRanges. This is handy for updating a set of stored NSRanges as text is changed. This might seem easy, but there are a large number of edge cases that RangeMutation handles, including mutations that invalidate (for example completely delete) a range.
Extensions
NSRange
// convenience
static var zero: NSRange
static var notFound: NSRange
var max: Int
// shifting
public func shifted(by delta: Int) -> NSRange?
public func shifted(startBy delta: Int) -> NSRange?
public func shifted(endBy delta: Int) -> NSRange?
// mutating
public func clamped(to limit: Int) -> NSRange
func apply(_ change: RangeMutation) -> NSRange?
// creating
init(_ textRange: NSTextRange, provider: NSTextElementProvider)
init?(_ textRange: UITextRange, textView: UITextView)
// working with Swift String
func range(in string: String) -> Range<String.Index>?
Rearrange
Rearrange is a collection of utilities for making it easier to work with
NSRange
andNSTextRange
. It’s particularly handy when used with the Cocoa text system.Integration
Swift Package Manager:
Types
RangeMutation
This is a struct that encapsulates a single change to an
NSRange
. It’s useful for serializing, queuing, or otherwise storing changes and applying them.You can also use this class to tranform individual points or other
NSRange
s. This is handy for updating a set of storedNSRange
s as text is changed. This might seem easy, but there are a large number of edge cases thatRangeMutation
handles, including mutations that invalidate (for example completely delete) a range.Extensions
NSRange
NSTextRange
UITextRange
IndexSet
String
Suggestions or Feedback
We’d love to hear from you! Get in touch via twitter, an issue, or a pull request.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.