NSValue 值

前言

  • NSValue 值

    • Objective-C

      1
      @interface NSValue : NSObject <NSCopying, NSSecureCoding>
    • Swift

      1
      public class NSValue : NSObject, NSCopying, NSSecureCoding
    • 将任意数据类型包装成对象

1、比较两个 NSValue 类型数据的大小

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)];
    NSValue *value2 = [NSValue valueWithPoint:NSMakePoint(10, 32)];

    // isEqualToValue
    BOOL bl = [value1 isEqualToValue:value2];

    if (bl) {
    NSLog(@"value1 == value2");
    } else {
    NSLog(@"value1 != value2");
    }
  • Swift

    1
    2
    3
    4
    5
    6
    let value1: NSValue = NSValue(point: NSMakePoint(10, 32))
    let value2: NSValue = NSValue(point: NSMakePoint(10, 32))

    let bl1: Bool = value1 == value2

    let bl2: Bool = value1.isEqualToValue(value2)

2、NSValue 与 OC 数据类型的相互转换

  • Objective-C

    1
    2
    3
    4
    5
    6
    // 将 OC 数据类型转换成 NSValue
    NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)];

    // 将 NSValue 转换成 OC 数据类型
    NSPoint point = [value1 pointValue];
    NSLog(@"x: %.0f, y: %.0f", point.x, point.y);
  • Swift

    1
    2
    3
    4
    5
    // OC 转 NSValue
    let value: NSValue = NSValue(point: NSMakePoint(10, 32))

    // NSValue 转 OC
    let point: NSPoint = value.pointValue

3、NSValue 与 自定义数据类型 的相互转换

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // 将 自定义数据类型 转换成 NSValue

    // 自定义结构体
    typedef struct { int year; int month; int day; } MyDate;

    MyDate date = {2016, 1, 11};

    // 取要转换的数据的地址
    void *valueAdd = &date;

    // 将自定义数据类型装换成 C 语言字符串
    char *objCType = @encode(MyDate);

    // 对象方法,将自定义数据类型转换成 NSValue
    NSValue *value2 = [[NSValue alloc] initWithBytes:valueAdd objCType:objCType];

    // 类方法,将自定义数据类型转换成 NSValue
    NSValue *value3 = [NSValue valueWithBytes:&date objCType:@encode(MyDate)];

    // 将 NSValue 转换成 自定义数据类型

    MyDate date1;
    MyDate date2;

    // 从 NSValue 中取出的值放到 &date1 中
    [value2 getValue:&date1];

    // 从 NSValue 中取出的值放到 &date2 中
    [value3 getValue:&date2];

    NSLog(@"%i, %i, %i", date1.year, date1.month, date1.day);
    NSLog(@"%i, %i, %i", date2.year, date2.month, date2.day);

    // 从 NSValue 中取出自定义的数据类型
    const char *type = [value2 objCType];

    NSLog(@"%@", [NSString stringWithUTF8String:type]);
文章目录
  1. 1. 前言
  2. 2. 1、比较两个 NSValue 类型数据的大小
  3. 3. 2、NSValue 与 OC 数据类型的相互转换
  4. 4. 3、NSValue 与 自定义数据类型 的相互转换
隐藏目录