📅  最后修改于: 2020-12-08 05:55:50             🧑  作者: Mango
本节说明有关使用JavaScript访问本机API的概述。
NativeScript运行时为Android和iOS平台提供隐式类型转换。这个概念被称为编组。例如,NativeScript- iOS平台可以类似地隐式转换JavaScript和Objective-C数据类型,Java / Kotlin可以轻松地映射到JavaScript项目类型和值。让我们简短地了解如何在每种类型中进行编组。
我们可以轻松地将iOS和android数字数据类型转换为JavaScript数字。从iOS到JavaScript的简单数字转换定义如下-
console.log(`max(7,9) = ${max(7,9)}`);
这里,
本机的max()函数将转换为JavaScript号。
Java支持不同的数字类型,例如字节,短整数,整数,浮点数,双精度和长整数。 JavaScript只有数字类型。
考虑下面显示的简单Java类-
class Demo extends java.lang.Object {
public int maxMethod(int a,int b) {
if(a>b) {
return a;
} else {
return b;
}
}
}
这里,
上面的代码包含两个整数参数。我们可以使用JavaScript调用上述代码对象,如下所示-
//Create an instance for Demo class
var obj = new Demo();
//implicit integer conversion for calling the above method
obj.maxMethod(7,9);
Android字符串在java.lang中定义。 NSSring中定义了字符串和iOS字符串。让我们看看如何在两个平台上执行编组。
字符串是不可变的,但字符串缓冲区支持可变字符串。
以下代码是简单映射的示例-
//Create android label widget
var label = new android.widget.Label();
//Create JavaScript string
var str = "Label1";
//Convert JavaScript string into java label.setText(str);
// text is converted to java.lang.String
布尔类在java.lang.Boolean中定义。此类将boolean值包装在一个对象中。我们可以轻松地将布尔值转换为字符串,反之亦然。简单的例子定义如下-
//create java string
let data = new java.lang.String('NativeScript');
//map java String to JavaScript string,
let result = data.startsWith('N');
//return result
console.log(result);// true
NSString类是不可变的,但其子类NSMutableString是不可变的。此类包含用于处理字符串的方法的集合。它声明如下-
class NSString : NSObject
考虑一个简单的Objective-C声明,如下所示-
NSString *str = @"nativescript";
//convert the string to uppercase
NSString *str1;
str1 = [str uppercaseString];
NSLog(@"Uppercase String : %@\n", str1 );
NSStrings可以轻松地映射到JavaScript字符串。
本节说明如何在数组中执行编组。让我们首先以iOS环境为例。
class NSArray : NSObject
这里,
NSArray用于管理称为数组的对象的有序集合。它用于创建静态数组。其子类NSMutableArray用于创建动态数组。
考虑可以使用数组字面量创建NSArray对象,如下所示-
let array: NSArray = ["React","Vue","TypeScript"]
现在,我们可以将该数组映射到JavaScript中,如下所示-
//create native array
let nsArr = NSArray.arrayWithArray("React","Vue","TypeScript"]);
//create simple javascript array
let jsArr = ["Hello,World","NativeScript"];
//Now compare the two arrays,
let compare = nsArr.isEqual(jsArr);
console.log(comapre);
这将返回输出为false。
Java数组在java.util.Arrays中定义。此类包含用于操纵数组的各种方法。一个例子如下所示-
//javascript array
let data = [12,45,23,56,34,78,50];
//create java array
let result = ns.example.Math.maxElement(data);
console.log(result);
类和对象是面向对象编程的基本概念。类是用户定义的原型。对象是类的实例。类表示一种类型的所有对象共有的一组属性或方法。让我们了解两种移动开发环境的本机类和对象。
Java和Kotlin类具有由完整软件包名称表示的唯一标识符。
例如,
android.view.View-它是用于屏幕布局和与用户交互的基本用户界面类。我们可以在JavaScript中访问此类,如下所示-
const View = android.view.View;
首先,我们使用以下语句导入类-
import android.view.View;
接下来创建一个如下所示的类-
public class MyClass {
public static void staticMethod(context) {
//create view instance
android.view.View myview = new android.view.View(context);
}
}
在以上相同的类中,我们可以使用以下代码访问JavaScript函数-
const myview = new android.view.View(context);
同样,我们可以访问java.lang包中的接口,常量和枚举。
在两节@interface和@implementation中定义了Objective-C类。类定义以关键字@interface开头,后接interface(class)名称。在Objective-C中,所有类都是从称为NSObject的基类派生的。
它是所有Objective-C类的超类。 Simple Circle类的定义如下所示-
@interface Circle:NSObject {
//Instance variable
int radius;
}
@end
考虑一个具有如下所示方法的类-
@interface MyClass : NSObject
+ (void)baseStaticMethod;
@end
可以使用以下代码将此类转换为javascript-
function MyClass() { /* native call */ };
Object.setPrototypeOf(MyClass, NSObject);
BaseClass.baseStaticMethod = function () { /* native call */ };
JavaScript instanceof运算符用于验证对象是否从给定的类继承。这可以定义为-
var obj = MyClass.alloc().init(); // object creation
console.log(obj instanceof NSObject); //return true
这里,
使用alloc,init或new方法创建Objective-C实例。在上面的示例中,我们可以使用以下新方法轻松创建对象初始化-
var obj = MyClass.new();
同样,您可以访问静态方法和属性。