NSRange 范围

前言

  • NSRange:结构体,这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围。

    • Objective-C

      1
      2
      3
      4
      5
      6
      typedef struct _NSRange {
      NSUInteger location; // 表示该范围的起始位置
      NSUInteger length; // 表示该范围内所含的元素个数
      } NSRange;

      typedef unsigned long NSUInteger;
    • Swift

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      public typealias NSRange = _NSRange

      public struct _NSRange {
      public var location: Int
      public var length: Int
      public init()
      public init(location: Int, length: Int)
      }

      extension NSRange {
      public init(_ x: Range<Int>)
      @warn_unused_result
      public func toRange() -> Range<Int>?
      }
  • Range:结构体,这个结构体用来表示一个区间的范围。

    • Swift

      1
      public struct Range<Element : ForwardIndexType> : Equatable, CollectionType, CustomStringConvertible, CustomDebugStringConvertible

1、NSRange/Range 结构体变量的创建与调用

1.1 NSRange 结构体变量的创建与调用

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // NSRange 结构体变量的创建与赋值

    // 先定义变量,再赋值
    NSRange range1;
    range1.location = 6;
    range1.length = 1;

    // 定义时直接赋值
    NSRange range2 = {7, 2};

    // 给指定成员赋值
    NSRange range3 = {.length = 3, .location = 8};

    // 使用函数赋值
    NSRange range4 = NSMakeRange(9, 4);

    // NSRange 结构体变量值的调用

    NSLog(@"range1: %zi, %zi", range1.location, range1.length);
    NSLog(@"range2: %zi, %zi", range2.location, range2.length);
    NSLog(@"range3: %zi, %zi", range3.location, range3.length);
    NSLog(@"range4; %zi, %zi", range4.location, range4.length);
  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // NSRange 结构体变量的创建与赋值

    // 先定义变量,再赋值
    var nsRange1: NSRange = NSRange()
    nsRange1.location = 6;
    nsRange1.length = 1;

    // 定义时直接赋值
    let nsRange2: NSRange = NSRange(location: 7, length: 2)

    // 由区间值创建
    let nsRange3: NSRange = NSRange(2...9)

    // 由方法创建
    let nsRange4: NSRange = NSMakeRange(1, 8)

    // NSRange 结构体变量值的调用

    print("\(nsRange1.location), \(nsRange1.length)")

1.2 Range 结构体变量的创建与调用

  • Swift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Range 结构体变量的创建与赋值

    let str = "hello world"

    // 1..<9
    let range1: Range = Range(1...8)

    // 2..<5
    var range2: Range = Range(2..<5)

    // 3..<7
    let range3: Range = str.startIndex.advancedBy(3)...str.startIndex.advancedBy(6)

    // Range 值的修改

    range2.startIndex = 3
    range2.endIndex = 6

    // Range 值的判断

    let bl: Bool = range2.isEmpty

2、NSRange 与 NSString 的相互转换

  • Objective-C

    1
    2
    3
    4
    5
    // NSRange 转 NSString
    NSString *stringFronRange = NSStringFromRange(range4);

    // NSString 转 NSRange
    NSRange range5 = NSRangeFromString(stringFronRange);
  • Swift

    1
    2
    3
    4
    5
    6
    7
    let nsRange1 = NSRange(location: 7, length: 2)

    // NSRange 转 String
    let string: String = NSStringFromRange(nsRange1)

    // String 转 NSRange
    let nsRange: NSRange = NSRangeFromString(string)

3、NSRange 与 Range 的相互转换

  • Swift

    1
    2
    3
    4
    5
    // Range 转 NSRange
    let nsRange: NSRange = NSRange(1...10)

    // NSRange 转 Range
    let range: Range? = nsRange.toRange()
文章目录
  1. 1. 前言
  2. 2. 1、NSRange/Range 结构体变量的创建与调用
    1. 2.1. 1.1 NSRange 结构体变量的创建与调用
    2. 2.2. 1.2 Range 结构体变量的创建与调用
  3. 3. 2、NSRange 与 NSString 的相互转换
  4. 4. 3、NSRange 与 Range 的相互转换
隐藏目录