- 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();
同樣,您可以訪問靜態方法和屬性。