-
Notifications
You must be signed in to change notification settings - Fork 115
API文档_iOS OS X_Objective C_LSCValue
所有原生层与lua层的数据交互主要由该类型来封装和传递(对于导出类型也一样,只是在方法参数传入和返回时由LSCContext
自动封装,不需要开发者介入)。其统一了交互中传输的数据类型,帮助开发者快速理解并对其进行使用。
LSCValue
> NSObject
LSCValue
不能使用构造来进行对象初始化,需要使用其提供的一系列类方法来进行对象构造。
表示包含值的类型,为枚举类型,取值如下:
名称 | 说明 |
---|---|
LSCValueTypeNil |
空值,nil
|
LSCValueTypeNumber |
数值类型 |
LSCValueTypeBoolean |
布尔类型 |
LSCValueTypeString |
字符串类型 |
LSCValueTypeArray |
数组类型 |
LSCValueTypeMap |
字典类型 |
LSCValueTypePtr |
指针类型 |
LSCValueTypeObject |
对象类型 |
LSCValueTypeInteger |
整型 |
LSCValueTypeData |
二进制数据类型 |
LSCValueTypeFunction |
方法类型 |
LSCValueTypeTuple |
元组类型 |
LSCValueTypeClass |
导出类型 |
LSCValueType
创建包含nil
的LSCValue
对象。在给lua传递一个nil
值时,可以通过该方法创建对象并传给lua层。
+ (instancetype)nilValue;
包含nil
的LSCValue
对象实例
下例演示在注册方法中返回nil
到lua层
[context registerMethodWithName:@"testMethod" block:^LSCValue* (NSArray<LSCValue *> *arguments) {
return [LSCValue nilValue];
}];
创建包含数值的LSCValue
对象。其传入值为NSNumber
类型,可以包含整型或者浮点型,在lua层统一表现为number
类型。
+ (instancetype)numberValue:(NSNumber *)numberValue;
- numberValue:
NSNumber
类型对象,可将整型值或浮点型值封装到该对象中传入方法。
包含数值的LSCValue
对象实例
创建包含布尔值的LSCValue
对象。在Objective-C中的YES
和NO
,会分别对应lua中的true
和false
+ (instancetype)booleanValue:(BOOL)boolValue;
- boolValue: 布尔值
YES
或NO
包含布尔值的LSCValue
对象实例
创建包含字符串的LSCValue
对象。
+ (instancetype)stringValue:(NSString *)stringValue;
- stringValue: 字符串
包含字符串的LSCValue
对象实例
创建包含整型值的LSCValue
对象。该方法允许传入一个整型数值来初始化对象,由于lua中所有数值类型都使用number
(浮点数)来表示,因此在传递给lua后会进行转换。
+ (instancetype)integerValue:(NSInteger)integerValue;
- integerValue: 整型值
包含整型值的LSCValue
对象实例
创建包含数组(NSArray
类型)的LSCValue
对象。数组中的元素可以为任意类型,LSC会根据实际情况来解析并转换到lua对应的数据类型。
+ (instancetype)arrayValue:(NSArray *)arrayValue;
- arrayValue: 数组对象
包含数组的LSCValue
对象实例
NSArray *arr = @[@1024, @"Hello World"];
LSCValue *arrayVal = [LSCValue arrayValue:arr];
创建包含字典(NSDictionary
类型)的LSCValue
对象。字典中的元素可以为任意类型,LSC会根据实际情况来解析并转换到lua对应的数据类型。
+ (instancetype)dictionaryValue:(NSDictionary *)dictionaryValue;
- dictionaryValue: 字典对象
包含字典的LSCValue
对象实例
NSDictionary *dict = @{@"key1" : @1024, @"key2" : @"Hello World"};
LSCValue *dictVal = [LSCValue dictionaryValue:dict];
创建包含二进制数据(NSData
类型)的LSCValue
对象。lua中没有对应的二进制数据类型,通过该方法传给lua的值会转换成string
类型进行保存。
+ (instancetype)dataValue:(NSData *)dataValue;
- dataValue: 二进制数据
包含二进制数据的LSCValue
对象实例
NSData *data = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding];
LSCValue *dataVal = [LSCValue dataValue:data];
创建包含对象指针的LSCValue
对象实例,该方法要求传入一个LSCPointer
类型对象,其包含了一个Objective-C类型指针,该类型会转换为lua层中的light userdata
类型。
+ (instancetype)pointerValue:(LSCPointer *)pointerValue;
- pointerValue: 指针类型对象。
包含指针类型的LSCValue
对象实例。
NSObject *object = [[NSObject alloc] init];
LSCPointer *ptr = [[LSCPointer alloc] initWithPtr:&object];
LSCValue *ptrValue = [LSCValue pointerValue:ptr];
创建包含lua方法(function
类型)的LSCValue
对象示例。该方法要求传入一个LSCFunction
类型对象,其对应lua中的function
类型,需要注意的是LSCFunction
无法在原生层直接创建,需要lua层将方法传递给原生层时LSC框架自动构建对象。
+ (instancetype)functionValue:(LSCFunction *)functionValue;
- functionValue: lua方法
包含lua方法的LSCValue
对象实例。
创建包含元组的LSCValue
对象实例。该方法用于原生层向lua层返回一个元组返回值时使用(如local x,y = getPos();
),其要求传入一个LSCTuple
类型来表示lua中的元组。
+ (instancetype)tupleValue:(LSCTuple *)tupleValue;
- tupleValue: 返回给lua的元组
包含元组的LSCValue
对象实例。
LSCTuple *tuple = [[LSCTuple alloc] init];
[tuple addReturnValue:@1024];
[tuple addReturnValue:@"Hello World"];
LSCValue *retVal = [LSCValue tupleValue:tuple];
创建包含导出类型的LSCValue
对象实例。导出类型为LSC框架将原生类型映射到lua层作为一种类型进行操作的机制,该类型在原生表示为LSCExportTypeDescriptor
。
+ (instancetype)typeValue:(LSCExportTypeDescriptor *)typeDescriptor;
- typeDescriptor: 导出到lua的原生类型描述对象
包含导出类型的LSCValue
对象实例。
传入一个对象来创建LSCValue
对象实例,该方法可以让开发者不需要关注传入对象的类型,方法内部会根据传入对象作正确的转换。
+ (instancetype)objectValue:(id)objectValue;
- objectValue: 对象,可以任意合法的Objective-C引用类型对象实例。
根据传入的参数值不同,创建包含不同值的LSCValue
对象实例。
将包含的值转换为对象并返回。这种方式可以获取LSCValue
所包含的值,在不关心值类型的情况下可以使用。
- (id)toObject;
转换后的对象
将包含的值转换为字符串并返回。有以下几种情况:
- 为数值类型,直接转换为对应数字的字符串
- 为字符串类型,直接返回
- 为指针类型,返回指针的地址字符串
- 为对象类型,返回对象
description
信息
- (NSString *)toString;
转换后的字符串
将包含的值转换为数值并返回。有以下几种情况:
- 为数值类型,直接转换
- 为字符串类型,当只包含数字内容,则直接转换,否则为0
- 为对象或指针类型,返回对象或指针的地址值。
- (NSNumber *)toNumber;
转换后的数值
将包含的值转换为整型值并返回,有以下几种情况:
- 为数值类型,直接转换
- 为字符串类型,当只包含数字内容,则直接转换,否则为0
- 为对象或指针类型,返回对象或指针的地址值。
- (NSInteger)toInteger;
转换后的整型值
将包含的值转换为浮点数并返回,有以下几种情况:
- 为数值类型,直接转换
- 为字符串类型,当只包含数字内容,则直接转换,否则为0
- 为对象或指针类型,返回对象或指针的地址值。
- (double)toDouble;
转换后的浮点数
将包含的值转换为布尔值并返回,有以下几种情况:
- 为数值类型时,当数值为0则转换为
NO
,否则为YES
- 为字符串类型时,当字符串内容为不为零的数值字符串,"YES","true"时为
YES
,其他的为NO
- 非上述两种类型时,如果值不为
nil
则为YES
,否则为NO
- (BOOL)toBoolean;
转换后的布尔值
将包含的值转换为二进制数据并返回。有以下几种情况:
- 为二进制数据类型,直接返回
- 为字符串类型,转换为UTF8编码的二进制数据
- 非上述类型,返回
nil
- (NSData *)toData;
转换后的二进制数据。
返回包含的数组对象。如果非数组类型LSCValue
对象,则返回nil
。
- (NSArray *)toArray
数组对象
返回包含的字典对象。如果非字典类型LSCValue
对象,则返回nil
。
- (NSDictionary *)toDictionary;
字典对象
将包含的值转换为指针并返回。如果是指针类型LSCValue
对象则直接返回,否则返回值的指针地址并封装为LSCPointer
返回。
- (LSCPointer *)toPointer;
转换后的指针对象。
返回包含的lua方法,如果非lua方法类型的LSCValue
对象,则返回nil
。
- (LSCFunction *)toFunction;
lua方法对象
返回包含的元组,如果非元组类型的LSCValue
对象,则返回nil
。
- (LSCTuple *)toTuple;
元组
返回包含的导出类型,如果非导出类型的LSCValue
对象,则返回nil
。
- (LSCExportTypeDescriptor *)toType;
导出类型