NativeScript - API natives utilisant JavaScript

Cette section explique la présentation de l'accès aux API natives à l'aide de JavaScript.

Triage

Le NativeScript Runtime fournit une conversion de type implicite pour les plates-formes Android et iOS. Ce concept est connu sous le nom de marshalling. Par exemple, la palette NativeScript-iOS peut convertir implicitement les types de données JavaScript et Objective-C de la même manière, Java / Kotlin peut facilement être mappé aux types et valeurs de projet JavaScript. Comprenons comment effectuer brièvement le marshalling dans chaque type un par un.

Valeurs numériques

Nous pouvons facilement convertir les types de données numériques iOS et Android en nombres JavaScript. La conversion numérique simple pour iOS en JavaScript est définie ci-dessous -

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

Ici,

La fonction native max () est convertie en nombre JavaScript.

Environnement Android

Java prend en charge différents types numériques tels que byte, short, int, float, double et long. JavaScript n'a que le type de nombre.

Considérez une classe Java simple illustrée ci-dessous -

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

Ici,

Le code ci-dessus contient deux arguments entiers. Nous pouvons appeler l'objet de code ci-dessus en utilisant JavaScript comme indiqué ci-dessous -

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

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

Cordes

Les chaînes Android sont définies dans java.lang.string et les chaînes iOS sont définies dans NSSring. Voyons comment effectuer le marshalling sur les deux plates-formes.

Android

Les chaînes sont immuables mais les tampons String prennent en charge les chaînes mutables.

Le code ci-dessous est un exemple de mappage simple -

//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 booléenne est définie dans java.lang.Boolean. Cette classe encapsule une valeur booléenne dans un objet. Nous pouvons facilement convertir un booléen en String et vice-versa. Un exemple simple est défini comme indiqué ci-dessous -

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

environnement iOS

La classe NSString est immuable mais sa sous-classe NSMutableString est immuable. Cette classe contient une collection de méthodes pour travailler avec des chaînes. Il est déclaré comme ci-dessous -

class NSString : NSObject

Considérez une simple déclaration objective-c comme indiqué ci-dessous -

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

Les NSStrings peuvent facilement être mappées à des chaînes JavaScript.

Tableau

Cette section explique comment effectuer le marshalling dans les tableaux. Prenons d'abord un exemple d'environnement iOS.

Déclaration Array

class NSArray : NSObject

Ici,

NSArray est utilisé pour gérer une collection ordonnée d'objets appelés tableaux. Il est utilisé pour créer un tableau statique. Sa sous-classeNSMutableArray est utilisé pour créer des tableaux dynamiques.

Considérez que les objets NSArray peuvent être créés à l'aide de littéraux de tableau comme indiqué ci-dessous -

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

Maintenant, nous pouvons mapper ce tableau en JavaScript comme indiqué ci-dessous -

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

Cela renverra la sortie comme fausse.

Déclaration de tableau Android

Les tableaux Java sont définis dans java.util.Arrays. Cette classe contient diverses méthodes pour manipuler les tableaux. Un exemple est montré ci-dessous -

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

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

Classes et objets

Les classes et les objets sont des concepts de base de la programmation orientée objet. La classe est un prototype défini par l'utilisateur. L'objet est une instance de classe. La classe représente l'ensemble des propriétés ou méthodes communes à tous les objets d'un même type. Laissez-nous comprendre les classes et les objets natifs pour les deux environnements de développement mobile.

Environnement Android

Les classes Java et Kotlin ont des identificateurs uniques désignés par le nom complet du package.

Par exemple,

android.view.View- Il s'agit d'une classe d'interface utilisateur de base pour la disposition de l'écran et l'interaction avec l'utilisateur. Nous pouvons accéder à cette classe en JavaScript comme indiqué ci-dessous -

const View = android.view.View;

Tout d'abord, nous importons la classe en utilisant l'instruction ci-dessous -

import android.view.View;

Ensuite, créez une classe comme indiqué ci-dessous -

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

Dans la même classe ci-dessus, nous pouvons accéder à la fonction JavaScript en utilisant le code ci-dessous -

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

De même, nous pouvons accéder aux interfaces, aux constantes et aux énumérations dans les packages java.lang.

Environnement iOS

Les classes Objective-C sont définies dans deux sections @interface et @implementation. La définition de classe commence par le mot-clé@interface suivi du interface(class)Nom. En Objective-C, toutes les classes sont dérivées de la classe de base appelée NSObject.

C'est la superclasse de toutes les classes Objective-C. La classe Simple Circle est définie comme indiqué ci-dessous -

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

Considérez une classe avec une méthode comme indiqué ci-dessous -

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

Cette classe peut être convertie en javascript en utilisant le code ci-dessous -

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

JavaScript instanceofL'opérateur est utilisé pour vérifier si un objet hérite d'une classe donnée. Cela peut être défini comme -

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

Ici,

Les instances Objective-C sont créées à l'aide des méthodes alloc, init ou new. Dans l'exemple ci-dessus, nous pouvons facilement créer une initialisation d'objet en utilisant la nouvelle méthode comme ci-dessous -

var obj = MyClass.new();

De même, vous pouvez accéder aux méthodes et propriétés statiques.