NativeScript - Native APIs mit JavaScript
In diesem Abschnitt wird die Übersicht über den Zugriff auf native APIs mit JavaScript erläutert.
Marshalling
Die NativeScript Runtime bietet implizite Typkonvertierung für Android- und iOS-Plattformen. Dieses Konzept wird als Rangieren bezeichnet. Beispielsweise kann NativeScript-iOS-Paltform implizit JavaScript- und Objective-C-Datentypen konvertieren. Java / Kotlin kann problemlos JavaScript-Projekttypen und -Werten zugeordnet werden. Lassen Sie uns kurz verstehen, wie man Marshalling in jedem Typ einzeln durchführt.
Numerische Werte
Wir können numerische Datentypen für iOS und Android problemlos in JavaScript-Zahlen konvertieren. Die einfache numerische Konvertierung für iOS in JavaScript ist unten definiert -
console.log(`max(7,9) = ${max(7,9)}`);
Hier,
Die native Funktion max () wird in eine JavaScript-Nummer konvertiert.
Android-Umgebung
Java unterstützt verschiedene numerische Typen wie Byte, Short, Int, Float, Double und Long. JavaScript hat nur den Nummerntyp.
Betrachten Sie eine einfache Java-Klasse, die unten gezeigt wird -
class Demo extends java.lang.Object {
public int maxMethod(int a,int b) {
if(a>b) {
return a;
} else {
return b;
}
}
}
Hier,
Der obige Code enthält zwei ganzzahlige Argumente. Wir können das obige Codeobjekt mit JavaScript aufrufen, wie unten gezeigt -
//Create an instance for Demo class
var obj = new Demo();
//implicit integer conversion for calling the above method
obj.maxMethod(7,9);
Saiten
Android-Zeichenfolgen werden in java.lang.string und iOS-Zeichenfolgen in NSSring definiert. Lassen Sie uns sehen, wie Marshalling auf beiden Plattformen durchgeführt wird.
Android
Strings sind unveränderlich, aber String-Puffer unterstützen veränderbare Strings.
Der folgende Code ist ein Beispiel für eine einfache Zuordnung -
//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
Die Boolesche Klasse ist in java.lang.Boolean definiert. Diese Klasse umschließt einen booleschen Wert in einem Objekt. Wir können Boolesche Werte leicht in Zeichenfolgen konvertieren und umgekehrt. Ein einfaches Beispiel ist wie folgt definiert:
//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-Umgebung
Die NSString-Klasse ist unveränderlich, aber ihre Unterklasse NSMutableString ist unveränderlich. Diese Klasse enthält eine Sammlung von Methoden zum Arbeiten mit Zeichenfolgen. Es wird wie folgt deklariert -
class NSString : NSObject
Betrachten Sie eine einfache Ziel-c-Erklärung wie unten gezeigt -
NSString *str = @"nativescript";
//convert the string to uppercase
NSString *str1;
str1 = [str uppercaseString];
NSLog(@"Uppercase String : %@\n", str1 );
NSStrings können problemlos JavaScript-Zeichenfolgen zugeordnet werden.
Array
In diesem Abschnitt wird erläutert, wie Marshalling in Arrays durchgeführt wird. Nehmen wir zunächst ein Beispiel für eine iOS-Umgebung.
Array-Deklaration
class NSArray : NSObject
Hier,
NSArray wird verwendet, um die geordnete Sammlung von Objekten zu verwalten, die als Arrays bezeichnet werden. Es wird verwendet, um ein statisches Array zu erstellen. Seine UnterklasseNSMutableArray wird verwendet, um dynamische Arrays zu erstellen.
Beachten Sie, dass NSArray-Objekte mithilfe von Array-Literalen wie unten gezeigt erstellt werden können.
let array: NSArray = ["React","Vue","TypeScript"]
Jetzt können wir dieses Array wie unten gezeigt in JavaScript abbilden -
//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);
Dies gibt die Ausgabe als false zurück.
Android-Array-Deklaration
Java-Arrays sind in definiert java.util.Arrays. Diese Klasse enthält verschiedene Methoden zum Bearbeiten von Arrays. Ein Beispiel ist unten gezeigt -
//javascript array
let data = [12,45,23,56,34,78,50];
//create java array
let result = ns.example.Math.maxElement(data);
console.log(result);
Klassen und Objekte
Klassen und Objekte sind Grundkonzepte der objektorientierten Programmierung. Klasse ist ein benutzerdefinierter Prototyp. Objekt ist eine Instanz der Klasse. Klasse repräsentiert die Menge von Eigenschaften oder Methoden, die allen Objekten eines Typs gemeinsam sind. Lassen Sie uns native Klassen und Objekte für beide mobilen Entwicklungsumgebungen verstehen.
Android-Umgebung
Java- und Kotlin-Klassen haben eindeutige Bezeichner, die durch den vollständigen Paketnamen gekennzeichnet sind.
Zum Beispiel,
android.view.View- Es ist eine grundlegende Benutzeroberflächenklasse für das Bildschirmlayout und die Interaktion mit dem Benutzer. Wir können auf diese Klasse in JavaScript zugreifen, wie unten gezeigt -
const View = android.view.View;
Zuerst importieren wir die Klasse mit der folgenden Anweisung:
import android.view.View;
Als nächstes erstellen Sie eine Klasse wie unten angegeben -
public class MyClass {
public static void staticMethod(context) {
//create view instance
android.view.View myview = new android.view.View(context);
}
}
In derselben Klasse können wir mit dem folgenden Code auf die JavaScript-Funktion zugreifen:
const myview = new android.view.View(context);
Ebenso können wir auf Schnittstellen, Konstanten und Aufzählungen in java.lang-Paketen zugreifen.
iOS-Umgebung
Objective-C-Klassen werden in zwei Abschnitten definiert: @interface und @implementation. Die Klassendefinition beginnt mit dem Schlüsselwort@interface gefolgt von der interface(class)Name. In Objective-C werden alle Klassen von der Basisklasse namens NSObject abgeleitet.
Es ist die Oberklasse aller Objective-C-Klassen. Die Simple Circle-Klasse ist wie folgt definiert:
@interface Circle:NSObject {
//Instance variable
int radius;
}
@end
Betrachten Sie eine Klasse mit einer Methode wie unten gezeigt -
@interface MyClass : NSObject
+ (void)baseStaticMethod;
@end
Diese Klasse kann mit dem folgenden Code in Javascript konvertiert werden:
function MyClass() { /* native call */ };
Object.setPrototypeOf(MyClass, NSObject);
BaseClass.baseStaticMethod = function () { /* native call */ };
JavaScript instanceofMit dem Operator wird überprüft, ob ein Objekt von einer bestimmten Klasse erbt. Dies kann definiert werden als -
var obj = MyClass.alloc().init(); // object creation
console.log(obj instanceof NSObject); //return true
Hier,
Objective-C-Instanzen werden mit Alloc-, Init- oder neuen Methoden erstellt. Im obigen Beispiel können wir die Objektinitialisierung einfach mit der folgenden neuen Methode erstellen:
var obj = MyClass.new();
Ebenso können Sie auf statische Methoden und Eigenschaften zugreifen.