- NativeScript 教程
- NativeScript - 首页
- NativeScript - 简介
- NativeScript - 安装
- NativeScript - 架构
- NativeScript - Angular 应用
- NativeScript - 模板
- NativeScript - 小部件
- NativeScript - 布局容器
- NativeScript - 导航
- NativeScript - 事件处理
- NativeScript - 数据绑定
- NativeScript - 模块
- NativeScript - 插件
- NativeScript - 使用 JavaScript 访问原生 API
- NativeScript - 在 Android 中创建应用
- NativeScript - 在 iOS 中创建应用
- NativeScript - 测试
- NativeScript 有用资源
- NativeScript - 快速指南
- NativeScript - 有用资源
- NativeScript - 讨论
NativeScript - 使用 JavaScript 访问原生 API
本节解释了使用 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 支持不同的数值类型,例如 byte、short、int、float、double 和 long。JavaScript 只有 number 类型。
考虑以下所示的简单 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.string 中定义,iOS 字符串在 NSSring 中定义。让我们看看如何在两个平台上执行数据封送。
Android
字符串是不可变的,但 String buffer 支持可变字符串。
以下代码是简单映射的示例:
//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
Boolean 类在 java.lang.Boolean 中定义。此类将 boolean 值包装在对象中。我们可以轻松地将 boolean 转换为 String,反之亦然。一个简单的例子如下所示:
//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 );
NSString 可以轻松映射到 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 环境
Objective-C 类在两个部分@interface 和@implementation 中定义。类定义以关键字@interface开头,后跟接口(类)名称。在 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
这里:
Objective-C 实例是使用 alloc、init 或 new 方法创建的。在上面的示例中,我们可以使用 new 方法轻松创建对象初始化,如下所示:
var obj = MyClass.new();
同样,您可以访问静态方法和属性。