Skip to content

API文档_iOS OS X_Objective C_LSCValue

vimfung edited this page Nov 12, 2018 · 12 revisions

API文档 > 类目录 > LSCValue

LSCValue

Summary

所有原生层与lua层的数据交互主要由该类型来封装和传递(对于导出类型也一样,只是在方法参数传入和返回时由LSCContext自动封装,不需要开发者介入)。其统一了交互中传输的数据类型,帮助开发者快速理解并对其进行使用。

继承

LSCValue > NSObject

Constructor

LSCValue不能使用构造来进行对象初始化,需要使用其提供的一系列类方法来进行对象构造。

Properties

valueType

表示包含值的类型,为枚举类型,取值如下:

名称 说明
LSCValueTypeNil 空值,nil
LSCValueTypeNumber 数值类型
LSCValueTypeBoolean 布尔类型
LSCValueTypeString 字符串类型
LSCValueTypeArray 数组类型
LSCValueTypeMap 字典类型
LSCValueTypePtr 指针类型
LSCValueTypeObject 对象类型
LSCValueTypeInteger 整型
LSCValueTypeData 二进制数据类型
LSCValueTypeFunction 方法类型
LSCValueTypeTuple 元组类型
LSCValueTypeClass 导出类型
类型

LSCValueType

Class Methods

nilValue

创建包含nilLSCValue对象。在给lua传递一个nil值时,可以通过该方法创建对象并传给lua层。

声明
+ (instancetype)nilValue;
返回值

包含nilLSCValue对象实例

示例

下例演示在注册方法中返回nil到lua层

[context registerMethodWithName:@"testMethod" block:^LSCValue* (NSArray<LSCValue *> *arguments) {

    return [LSCValue nilValue];

}];

numberValue:

创建包含数值的LSCValue对象。其传入值为NSNumber类型,可以包含整型或者浮点型,在lua层统一表现为number类型。

声明
+ (instancetype)numberValue:(NSNumber *)numberValue;
参数
  • numberValue: NSNumber类型对象,可将整型值或浮点型值封装到该对象中传入方法。
返回值

包含数值的LSCValue对象实例


booleanValue:

创建包含布尔值的LSCValue对象。在Objective-C中的YESNO,会分别对应lua中的truefalse

声明
+ (instancetype)booleanValue:(BOOL)boolValue;
参数
  • boolValue: 布尔值YESNO
返回值

包含布尔值的LSCValue对象实例


stringValue:

创建包含字符串的LSCValue对象。

声明
+ (instancetype)stringValue:(NSString *)stringValue;
参数
  • stringValue: 字符串
返回值

包含字符串的LSCValue对象实例


integerValue:

创建包含整型值的LSCValue对象。该方法允许传入一个整型数值来初始化对象,由于lua中所有数值类型都使用number(浮点数)来表示,因此在传递给lua后会进行转换。

声明
+ (instancetype)integerValue:(NSInteger)integerValue;
参数
  • integerValue: 整型值
返回值

包含整型值的LSCValue对象实例


arrayValue:

创建包含数组(NSArray类型)的LSCValue对象。数组中的元素可以为任意类型,LSC会根据实际情况来解析并转换到lua对应的数据类型。

声明
+ (instancetype)arrayValue:(NSArray *)arrayValue;
参数
  • arrayValue: 数组对象
返回值

包含数组的LSCValue对象实例

示例
NSArray *arr = @[@1024, @"Hello World"];
LSCValue *arrayVal = [LSCValue arrayValue:arr];

dictionaryValue:

创建包含字典(NSDictionary类型)的LSCValue对象。字典中的元素可以为任意类型,LSC会根据实际情况来解析并转换到lua对应的数据类型。

声明
+ (instancetype)dictionaryValue:(NSDictionary *)dictionaryValue;
参数
  • dictionaryValue: 字典对象
返回值

包含字典的LSCValue对象实例

示例
NSDictionary *dict = @{@"key1" : @1024, @"key2" : @"Hello World"};
LSCValue *dictVal = [LSCValue dictionaryValue:dict];

dataValue:

创建包含二进制数据(NSData类型)的LSCValue对象。lua中没有对应的二进制数据类型,通过该方法传给lua的值会转换成string类型进行保存。

声明
+ (instancetype)dataValue:(NSData *)dataValue;
参数
  • dataValue: 二进制数据
返回值

包含二进制数据的LSCValue对象实例

示例
NSData *data = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding];
LSCValue *dataVal = [LSCValue dataValue:data];

pointerValue:

创建包含对象指针的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];

functionValue:

创建包含lua方法(function类型)的LSCValue对象示例。该方法要求传入一个LSCFunction类型对象,其对应lua中的function类型,需要注意的是LSCFunction无法在原生层直接创建,需要lua层将方法传递给原生层时LSC框架自动构建对象。

声明
+ (instancetype)functionValue:(LSCFunction *)functionValue;
参数
  • functionValue: lua方法
返回值

包含lua方法的LSCValue对象实例。


tupleValue:

创建包含元组的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];

typeValue:

创建包含导出类型的LSCValue对象实例。导出类型为LSC框架将原生类型映射到lua层作为一种类型进行操作的机制,该类型在原生表示为LSCExportTypeDescriptor

声明
+ (instancetype)typeValue:(LSCExportTypeDescriptor *)typeDescriptor;
参数
  • typeDescriptor: 导出到lua的原生类型描述对象
返回值

包含导出类型的LSCValue对象实例。


objectValue:

传入一个对象来创建LSCValue对象实例,该方法可以让开发者不需要关注传入对象的类型,方法内部会根据传入对象作正确的转换。

声明
+ (instancetype)objectValue:(id)objectValue;
参数
  • objectValue: 对象,可以任意合法的Objective-C引用类型对象实例。
返回值

根据传入的参数值不同,创建包含不同值的LSCValue对象实例。

Instance Methods

toObject

将包含的值转换为对象并返回。这种方式可以获取LSCValue所包含的值,在不关心值类型的情况下可以使用。

声明
- (id)toObject;
返回

转换后的对象


toString

将包含的值转换为字符串并返回。有以下几种情况:

  1. 为数值类型,直接转换为对应数字的字符串
  2. 为字符串类型,直接返回
  3. 为指针类型,返回指针的地址字符串
  4. 为对象类型,返回对象description信息
声明
- (NSString *)toString;
返回值

转换后的字符串


toNumber

将包含的值转换为数值并返回。有以下几种情况:

  1. 为数值类型,直接转换
  2. 为字符串类型,当只包含数字内容,则直接转换,否则为0
  3. 为对象或指针类型,返回对象或指针的地址值。
声明
- (NSNumber *)toNumber;
返回值

转换后的数值


toInteger

将包含的值转换为整型值并返回,有以下几种情况:

  1. 为数值类型,直接转换
  2. 为字符串类型,当只包含数字内容,则直接转换,否则为0
  3. 为对象或指针类型,返回对象或指针的地址值。
声明
- (NSInteger)toInteger;
返回值

转换后的整型值


toDouble

将包含的值转换为浮点数并返回,有以下几种情况:

  1. 为数值类型,直接转换
  2. 为字符串类型,当只包含数字内容,则直接转换,否则为0
  3. 为对象或指针类型,返回对象或指针的地址值。
声明
- (double)toDouble;
返回值

转换后的浮点数


toBoolean

将包含的值转换为布尔值并返回,有以下几种情况:

  1. 为数值类型时,当数值为0则转换为NO,否则为YES
  2. 为字符串类型时,当字符串内容为不为零的数值字符串,"YES","true"时为YES,其他的为NO
  3. 非上述两种类型时,如果值不为nil则为YES,否则为NO
声明
- (BOOL)toBoolean;
返回值

转换后的布尔值


toData

将包含的值转换为二进制数据并返回。有以下几种情况:

  1. 为二进制数据类型,直接返回
  2. 为字符串类型,转换为UTF8编码的二进制数据
  3. 非上述类型,返回nil
声明
- (NSData *)toData;
返回值

转换后的二进制数据。


toArray

返回包含的数组对象。如果非数组类型LSCValue对象,则返回nil

声明
- (NSArray *)toArray
返回值

数组对象


toDictionary

返回包含的字典对象。如果非字典类型LSCValue对象,则返回nil

声明
- (NSDictionary *)toDictionary;
返回值

字典对象


toPointer

将包含的值转换为指针并返回。如果是指针类型LSCValue对象则直接返回,否则返回值的指针地址并封装为LSCPointer返回。

声明
- (LSCPointer *)toPointer;
返回值

转换后的指针对象。


toFunction

返回包含的lua方法,如果非lua方法类型的LSCValue对象,则返回nil

声明
- (LSCFunction *)toFunction;
返回值

lua方法对象


toTuple

返回包含的元组,如果非元组类型的LSCValue对象,则返回nil

声明
- (LSCTuple *)toTuple;
返回值

元组


toType

返回包含的导出类型,如果非导出类型的LSCValue对象,则返回nil

声明
- (LSCExportTypeDescriptor *)toType;
返回值

导出类型

Clone this wiki locally