美文网首页
KVC(5) 非对象类型

KVC(5) 非对象类型

作者: yxibng | 来源:发表于2020-01-31 13:52 被阅读0次

参考Representing Non-Object Values

  • valueForKey:
  • setValue:forKey:
  1. 对对象属性和非对象属性都生效
  2. 非对象属性采用NSNumberNSValue来包装
  3. KVC会自动在对象类型和非对象类型之间转换

NSNumber

Data type Creation method Accessor method
BOOL numberWithBool: boolValue (in iOS)</br>charValue (in macOS)*
char numberWithChar: charValue
double numberWithDouble: doubleValue
float numberWithFloat: floatValue
int numberWithInt: intValue
long numberWithLong: longValue
long long numberWithLongLong: longLongValue
short numberWithShort: shortValue
unsigned char numberWithUnsignedChar: unsignedChar
unsigned int numberWithUnsignedInt: unsignedInt
unsigned long numberWithUnsignedLong: unsignedLong
unsigned long long numberWithUnsignedLongLong: unsignedLongLong
unsigned short numberWithUnsignedShort: unsignedShort

注意 BOOLiOS平台和 macOS平台的区别

  1. macOS 平台,

    • 历史原因,BOOL 是 signed char 类型,
    • 传递@"true",@"YES"setValue:forKey:,此时,kvc 会尝试调用charValue(BOOL 是 char 类型的)。由于NSString并没有实现这个方法,所以造成运行时错误。
    • 只能传递NSNumber类型,例如 @(1) ,@(YES)
  2. iOS平台

    • BOOL is type defined as the native Boolean
    • KVC invokes boolValue, 对NSNumber和格式化的NSString都生效。

NSValue

Data type Creation method Accessor method
NSPoint valueWithPoint: pointValue
NSRange valueWithRange: rangeValue
NSRect valueWithRect: (macOS only). rectValue
NSSize valueWithSize: sizeValue

自定义的结构体

typedef struct {
    float x, y, z;
} ThreeFloats;
 
@interface MyClass
@property (nonatomic) ThreeFloats threeFloats;
@end

NSValue* result = [myClass valueForKey:@"threeFloats"];

ThreeFloats floats = {1., 2., 3.};
NSValue* value = [NSValue valueWithBytes:&floats objCType:@encode(ThreeFloats)];
[myClass setValue:value forKey:@"threeFloats"];

相关文章

  • KVC(5) 非对象类型

    参考Representing Non-Object Values valueForKey: setValue:fo...

  • iOS底层原理之kvc原理分析

    1.kvc:Key-Value Coding 基本类型使用 集合类型使用 非对象类型,转换成相应的NSValue,...

  • KVC(四)

    接上 :KVC(三 ) 接下来我们来看看 set/get异常处理、键值验证、非对象类型的处理 参考官网:Han...

  • JSONModel:NSUInteger类型属性可能的崩溃分析及

    预备知识当属性是基本数据类型时,在使用KVC时,KVC方法会自动把传入的value对象类型转换成基础数据类型,(即...

  • KVC非对象属性的表示以及属性的验证

    非对象 value的表示 NSObject提供的KVC协议方法的默认实现对对象和非对象属性都是有效的。默认的实现将...

  • 了解 Key-Value Coding

    Key-Value Coding KVC的使用 对象属性的访问(基本类型、集合类型、集合操作符,(keyPath)...

  • iOS - 关于 KVC 的一些总结

    目录1. 什么是 KVC2. 访问对象属性3. 访问集合属性4. 使用集合运算符5. 自定义集合运算符6. 非对象...

  • KVC的简单使用

    KVC字典转模型 KVC 中经常使用的就是字典转模型 KVC的大招 KVC设置对象属性及取值 KVC间接设置对象属...

  • 进阶任务4

    1.引用类型有对象、数组、函数、正则,非引用类型有数值、布尔值、null、undefined 5.过滤如下数组,只...

  • 引用类型与对象拷贝

    1.引用类型有哪些?非引用类型有哪些 引用类型: 对象 object 数组 函数 正则非引用类型...

网友评论

      本文标题:KVC(5) 非对象类型

      本文链接:https://www.haomeiwen.com/subject/ulegthtx.html