📜  NativeScript-使用JavaScript的本机API

📅  最后修改于: 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号。

Android环境

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

iOS环境

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。

Android数组声明

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);

类和对象

类和对象是面向对象编程的基本概念。类是用户定义的原型。对象是类的实例。类表示一种类型的所有对象共有的一组属性或方法。让我们了解两种移动开发环境的本机类和对象。

Android环境

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包中的接口,常量和枚举。

iOS环境

在两节@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();

同样,您可以访问静态方法和属性。