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

同樣,您可以訪問靜態方法和屬性。

廣告
© . All rights reserved.