NativeScript - 调用原生API

NativeScript - 调用原生API 首页 / NativeScript入门教程 / NativeScript - 调用原生API

本节说明有关使用JavaScript访问Native API的概述。

NativeScript运行时为Android和iOS平台提供隐式类型转换。这个概念被称为Marshalling。例如,NativeScript- iOS平台可以类似地隐式转换JavaScript和Objective-C数据类型,Java /Kotlin可以轻松地映射到JavaScript项目类型和值。

Numeric 数字类型

无涯教程可以轻松地将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);

Strings 字符串

Android字符串在java.lang.string中定义,而iOS字符串在NSSring中定义。看看如何在两个平台上执行编组。

安卓系统

字符串是不可变的,但字符串缓冲区支持可变字符串。

以下代码是简单映射的示例-

//创建 android 标签小部件
var label = new android.widget.Label(); 

//创建 JavaScript 字符串
var str = "Label1";  

//Convert JavaScript string into java label.setText(str); 
// text is converted to java.lang.String

布尔类在java.lang.Boolean中定义。此类将布尔值包装在对象中。可以轻松地将布尔值转换为字符串,反之亦然。简单的例子定义如下-

//创建java字符串
let data = new java.lang.String('NativeScript'); 

//将 java 字符串映射到 JavaScript 字符串,
let result = data.startsWith('N'); 

//返回结果
console.log(result);// true

iOS环境

NSString类是不可变的,但其子类NSMutableString是不可变的。此类包含使用字符串的方法的集合。它声明如下-

class NSString : NSObject

考虑一个简单的Objective-C声明,如下所示-

NSString *str = @"nativescript"; 
//将字符串转换为大写
NSString *str1; 
str1 = [str uppercaseString]; 
NSLog(@"Uppercase String : %@\n", str1 );

NSStrings可以轻松地映射到JavaScript字符串。

Array 数组

本节说明如何在数组中执行编组。首先以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);

Classes和Objects

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

安卓环境

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类的超类。简单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();

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术与商业案例解读 -〔徐飞〕

罗剑锋的C++实战笔记 -〔罗剑锋〕

如何看懂一幅画 -〔罗桂霞〕

恋爱必修课 -〔李一帆〕

说透芯片 -〔邵巍〕

快手 · 音视频技术入门课 -〔刘歧〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

后端工程师的高阶面经 -〔邓明〕

深入拆解消息队列47讲 -〔许文强〕

好记忆不如烂笔头。留下您的足迹吧 :)