NativeScript - Native APIs sử dụng JavaScript

Phần này giải thích về tổng quan về cách truy cập các API gốc bằng JavaScript.

Marshalling

NativeScript Runtime cung cấp chuyển đổi kiểu ngầm định cho cả nền tảng Android và iOS. Khái niệm này được gọi là marshalling. Ví dụ: NativeScript-iOS paltform có thể chuyển đổi ngầm các kiểu dữ liệu JavaScript và Objective-C tương tự nhau, Java / Kotlin có thể dễ dàng được ánh xạ tới các loại và giá trị dự án JavaScript. Hãy để chúng tôi hiểu cách thực hiện sắp xếp theo từng loại một cách ngắn gọn.

Giá trị số

Chúng tôi có thể dễ dàng chuyển đổi các kiểu dữ liệu số iOS và android thành các số JavaScript. Chuyển đổi số đơn giản cho iOS thành JavaScript được định nghĩa dưới đây:

console.log(`max(7,9) = ${max(7,9)}`);

Đây,

Hàm max () gốc được chuyển đổi thành số JavaScript.

Môi trường Android

Java hỗ trợ các kiểu số khác nhau như byte, short, int, float, double và long. JavaScript chỉ có loại số.

Hãy xem xét một lớp Java đơn giản được hiển thị bên dưới:

class Demo extends java.lang.Object {
   public int maxMethod(int a,int b) {
      if(a>b) {
         return a;
      } else {
         return b;
      }
   }
}

Đây,

Đoạn mã trên chứa hai đối số nguyên. Chúng ta có thể gọi đối tượng mã trên bằng JavaScript như hình dưới đây:

//Create an instance for Demo class 
var obj = new Demo(); 

//implicit integer conversion for calling the above method 
obj.maxMethod(7,9);

Dây

Chuỗi Android được định nghĩa trong java.lang.string và chuỗi iOS được định nghĩa trong NSSring. Hãy để chúng tôi xem cách thực hiện điều phối trong cả hai nền tảng.

Android

Chuỗi là bất biến nhưng bộ đệm chuỗi hỗ trợ chuỗi có thể thay đổi.

Đoạn mã dưới đây là một ví dụ về ánh xạ đơn giản -

//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

Lớp Boolean được định nghĩa trong java.lang.Boolean. Lớp này bao bọc một giá trị của boolean trong một đối tượng. Chúng ta có thể dễ dàng chuyển đổi boolean thành String và ngược lại. Ví dụ đơn giản được định nghĩa như dưới đây:

//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

môi trường iOS

Lớp NSString là bất biến nhưng lớp con NSMutableString của nó là bất biến. Lớp này chứa một tập hợp các phương thức để làm việc với chuỗi. Nó được khai báo như sau:

class NSString : NSObject

Hãy xem xét một khai báo target-c đơn giản như được hiển thị bên dưới:

NSString *str = @"nativescript"; 
//convert the string to uppercase
NSString *str1; 
str1 = [str uppercaseString]; 
NSLog(@"Uppercase String : %@\n", str1 );

Các chuỗi NSStrings có thể dễ dàng được ánh xạ tới các chuỗi JavaScript.

Mảng

Phần này giải thích về cách thực hiện sắp xếp trong mảng. Hãy lấy một ví dụ về môi trường iOS trước.

Khai báo mảng

class NSArray : NSObject

Đây,

NSArray được sử dụng để quản lý tập hợp các đối tượng có thứ tự được gọi là mảng. Nó được sử dụng để tạo mảng tĩnh. Lớp phụ của nóNSMutableArray được sử dụng để tạo mảng động.

Hãy xem xét các đối tượng NSArray có thể được tạo bằng cách sử dụng các ký tự mảng như hình dưới đây:

let array: NSArray = ["React","Vue","TypeScript"]

Bây giờ, chúng ta có thể ánh xạ mảng này thành JavaScript như hình dưới đây:

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

Điều này sẽ trả về kết quả là false.

Khai báo mảng Android

Mảng Java được định nghĩa trong java.util.Arrays. Lớp này chứa nhiều phương thức khác nhau để thao tác với mảng. Một ví dụ được hiển thị bên dưới -

//javascript array 
let data = [12,45,23,56,34,78,50]; 

//create java array 
let result = ns.example.Math.maxElement(data);
console.log(result);

Lớp và Đối tượng

Lớp và Đối tượng là những khái niệm cơ bản của Lập trình hướng đối tượng. Lớp là một nguyên mẫu do người dùng xác định. Đối tượng là một thể hiện của lớp. Lớp đại diện cho tập hợp các thuộc tính hoặc phương thức chung cho tất cả các đối tượng của một kiểu. Hãy để chúng tôi hiểu các lớp và đối tượng gốc cho cả môi trường phát triển di động.

Môi trường Android

Các lớp Java và Kotlin có số nhận dạng duy nhất được biểu thị bằng tên gói đầy đủ.

Ví dụ,

android.view.View- Đây là một lớp giao diện người dùng cơ bản để bố trí màn hình và tương tác với người dùng. Chúng ta có thể truy cập lớp này bằng JavaScript như hình dưới đây -

const View = android.view.View;

Đầu tiên, chúng tôi nhập lớp bằng cách sử dụng câu lệnh dưới đây:

import android.view.View;

Tiếp theo, tạo một lớp như dưới đây:

public class MyClass {
   public static void staticMethod(context) {
      //create view instance
      android.view.View myview = new android.view.View(context);
   }
}

Trong cùng một lớp ở trên, chúng ta có thể truy cập hàm JavaScript bằng đoạn mã dưới đây:

const myview = new android.view.View(context);

Tương tự, chúng ta có thể truy cập các giao diện, hằng số và kiểu liệt kê trong các gói java.lang.

Môi trường iOS

Các lớp Objective-C được định nghĩa trong hai phần @interface và @implementation. Định nghĩa lớp bắt đầu bằng từ khóa@interface followed by the interface(class) name. In Objective-C, all classes are derived from the base class called NSObject.

It is the superclass of all Objective-C classes. Simple Circle class is defined as shown below −

@interface Circle:NSObject {
   //Instance variable
   int radius;
}
@end

Consider a class with one method as shown below −

@interface MyClass : NSObject 
+ (void)baseStaticMethod; 
@end

This class can be converted to javascript using the below code −

function MyClass() { /* native call */ }; 
Object.setPrototypeOf(MyClass, NSObject); 
BaseClass.baseStaticMethod = function () { /* native call */ };

JavaScript instanceof operator is used to verify, if an object inherits from a given class. This can be defined as −

var obj = MyClass.alloc().init(); // object creation 
console.log(obj instanceof NSObject); //return true

Here,

Objective-C instances are created using alloc, init or new methods. In the above example, we can easily create object initialization using new method as below −

var obj = MyClass.new();

Similarly, you can access static methods and properties.