NativeScript - API native che utilizzano JavaScript

Questa sezione spiega la panoramica dell'accesso alle API native utilizzando JavaScript.

Marshalling

NativeScript Runtime fornisce la conversione del tipo implicita per piattaforme Android e iOS. Questo concetto è noto come marshalling. Ad esempio, NativeScript-iOS paltform può convertire implicitamente i tipi di dati JavaScript e Objective-C in modo simile, Java / Kotlin può essere facilmente mappato a tipi e valori di progetti JavaScript. Cerchiamo di capire come eseguire brevemente il marshalling in ogni tipo.

Valori numerici

Possiamo convertire facilmente i tipi di dati numerici iOS e Android in numeri JavaScript. La conversione numerica semplice per iOS in JavaScript è definita di seguito:

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

Qui,

La funzione nativa max () viene convertita in numero JavaScript.

Ambiente Android

Java supporta diversi tipi numerici come byte, short, int, float, double e long. JavaScript ha solo il tipo di numero.

Considera una semplice classe Java mostrata di seguito:

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

Qui,

Il codice precedente contiene due argomenti interi. Possiamo chiamare l'oggetto codice sopra usando JavaScript come mostrato di seguito -

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

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

stringhe

Le stringhe Android sono definite in java.lang.string e le stringhe iOS sono definite in NSSring. Vediamo come eseguire il marshalling su entrambe le piattaforme.

Android

Le stringhe non sono modificabili ma i buffer di stringhe supportano stringhe mutabili.

Il codice seguente è un esempio di mappatura semplice:

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

La classe booleana è definita in java.lang.Boolean. Questa classe racchiude un valore booleano in un oggetto. Possiamo facilmente convertire booleano in String e viceversa. Un semplice esempio è definito come indicato di seguito:

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

Ambiente iOS

La classe NSString è immutabile ma la sua sottoclasse NSMutableString è immutabile. Questa classe contiene una raccolta di metodi per lavorare con le stringhe. È dichiarato come di seguito:

class NSString : NSObject

Considera una semplice dichiarazione obiettivo-c come mostrato di seguito:

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

Le stringhe NSS possono essere facilmente mappate su stringhe JavaScript.

Vettore

Questa sezione spiega come eseguire il marshalling negli array. Facciamo prima un esempio di ambiente iOS.

Dichiarazione di matrice

class NSArray : NSObject

Qui,

NSArray viene utilizzato per gestire la raccolta ordinata di oggetti denominati array. Viene utilizzato per creare array statici. La sua sottoclasseNSMutableArray viene utilizzato per creare array dinamici.

Considera che gli oggetti NSArray possono essere creati utilizzando letterali array come mostrato di seguito:

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

Ora possiamo mappare questo array in JavaScript come mostrato di seguito -

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

Ciò restituirà l'output come falso.

Dichiarazione di array Android

Gli array Java sono definiti in java.util.Arrays. Questa classe contiene vari metodi per manipolare gli array. Di seguito è mostrato un esempio:

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

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

Classi e oggetti

Le classi e gli oggetti sono concetti di base della programmazione orientata agli oggetti. La classe è un prototipo definito dall'utente. Object è un'istanza di classe. Class rappresenta l'insieme di proprietà o metodi comuni a tutti gli oggetti di un tipo. Cerchiamo di capire le classi e gli oggetti nativi per entrambi gli ambienti di sviluppo mobile.

Ambiente Android

Le classi Java e Kotlin hanno identificatori univoci indicati dal nome completo del pacchetto.

Per esempio,

android.view.View- È una classe di interfaccia utente di base per il layout dello schermo e l'interazione con l'utente. Possiamo accedere a questa classe in JavaScript come mostrato di seguito -

const View = android.view.View;

Innanzitutto, importiamo la classe utilizzando l'istruzione seguente:

import android.view.View;

Quindi crea una classe come indicato di seguito -

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

Nella stessa classe sopra, possiamo accedere alla funzione JavaScript utilizzando il codice seguente:

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

Allo stesso modo, possiamo accedere a interfacce, costanti ed enumerazioni all'interno dei pacchetti java.lang.

Ambiente iOS

Le classi Objective-C sono definite in due sezioni @interface e @implementation. La definizione della classe inizia con la parola chiave@interface seguito dal interface(class)nome. In Objective-C, tutte le classi derivano dalla classe base denominata NSObject.

È la superclasse di tutte le classi Objective-C. La classe Simple Circle è definita come mostrato di seguito:

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

Considera una classe con un metodo come mostrato di seguito:

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

Questa classe può essere convertita in javascript utilizzando il codice seguente:

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

JavaScript instanceofL'operatore viene utilizzato per verificare se un oggetto eredita da una determinata classe. Questo può essere definito come -

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

Qui,

Le istanze Objective-C vengono create utilizzando alloc, init o nuovi metodi. Nell'esempio sopra, possiamo facilmente creare l'inizializzazione degli oggetti usando il nuovo metodo come di seguito -

var obj = MyClass.new();

Allo stesso modo, puoi accedere a metodi e proprietà statici.