我们怎样才能得到另一个线范围之前的线范围?

How can we get the line range before another line range?

我使用这段代码获取当前行范围:

extension UITextView {
    var currentLineRange: NSRange {
        let nsText = self.text as NSString
        let currentRange = nsText.lineRange(for: self.selectedRange)
        return currentRange
    }
}

如何在另一个行之前获取行范围,例如:

func getLineRangeBefore(_ lineRange: NSRange) -> NSRange {
//...
}

一种方法是获取范围的行start,然后找到行开始之前位置的行范围:

extension NSString {
    func getLineRangeBefore(_ lineRange: NSRange) -> NSRange? {
        var lineStart = 0
        getLineStart(&lineStart, end: nil, contentsEnd: nil, for: lineRange)
        if lineStart == 0 {
            return nil
        }
        return self.lineRange(for: NSRange(location: lineStart - 1, length: 0))
    }
}

请注意,这应该 return 一个可选的 NSRange 因为范围可以包含在第一行中,在这种情况下,它之前没有行。