-
Notifications
You must be signed in to change notification settings - Fork 116
API文档_Android_Java_LuaValue
所有原生层与lua层的数据交互主要由该类型来封装和传递(对于导出类型也一样,只是在方法参数传入和返回时由LuaContext自动封装,不需要开发者介入)。其统一了交互中传输的数据类型,帮助开发者快速理解并对其进行使用。
cn.vimfung.luascriptcore
LuaValue > NSObject
创建包含null的LuaValue对象。在给lua传递一个nil值时,可以通过该方法创建对象并传给lua层。
LuaValue ();包含null的LuaValue对象实例
下例演示在注册方法中返回nil到lua层
context.registerMethod("testMethod", new LuaMethodHandler() {
@Override
public LuaValue onExecute(LuaValue[] arguments) {
return new LuaValue();
}
});创建包含某种类型数据(包含整型、浮点型、布尔型、字符串、二进制数组、数组、字典、LuaPointer、LuaFunction、LuaTuple等)的LuaValue对象。其中lua中整型会以number表示,同时也没有对应的二进制数据类型,会转换成string类型存储。
LuaValue (Integer value);
LuaValue (Long value);
LuaValue (Double value);
LuaValue (Boolean value);
LuaValue (String value);
LuaValue (byte[] value);
LuaValue (Byte[] value);
LuaValue (List<?> value);
LuaValue (Map<?, ?> value);
LuaValue (LuaPointer value);
LuaValue (LuaFunction value);
LuaValue (LuaTuple value);
LuaValue (Object value);- value: 任意数据类型
新创建的LuaValue对象实例
表示包含值的类型,为枚举类型,取值如下:
| 名称 | 说明 |
|---|---|
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;导出类型