NativeScript: API nativas que utilizan JavaScript

Esta sección explica la descripción general del acceso a las API nativas mediante JavaScript.

Marshalling

NativeScript Runtime proporciona una conversión de tipo implícita para las plataformas Android e iOS. Este concepto se conoce como clasificación. Por ejemplo, la plataforma NativeScript-iOS puede convertir implícitamente los tipos de datos de JavaScript y Objective-C de manera similar, Java / Kotlin se puede asignar fácilmente a los tipos y valores de proyectos de JavaScript. Entendamos brevemente cómo realizar la clasificación en cada tipo uno por uno.

Valores numéricos

Podemos convertir fácilmente los tipos de datos numéricos de iOS y Android en números de JavaScript. La conversión numérica simple para iOS a JavaScript se define a continuación:

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

Aquí,

La función nativa max () se convierte en un número de JavaScript.

Entorno Android

Java admite diferentes tipos numéricos como byte, short, int, float, double y long. JavaScript solo tiene tipo de número.

Considere una clase de Java simple que se muestra a continuación:

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

Aquí,

El código anterior contiene dos argumentos enteros. Podemos llamar al objeto de código anterior usando JavaScript como se muestra a continuación:

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

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

Instrumentos de cuerda

Las cadenas de Android se definen en java.lang.string y las cadenas de iOS se definen en NSSring. Veamos cómo realizar la clasificación en ambas plataformas.

Androide

Las cadenas son inmutables, pero los búferes de cadenas admiten cadenas mutables.

El siguiente código es un ejemplo de mapeo 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 clase booleana se define en java.lang.Boolean. Esta clase envuelve un valor booleano en un objeto. Podemos convertir fácilmente booleano a String y viceversa. El ejemplo simple se define como se indica a continuación:

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

entorno iOS

La clase NSString es inmutable pero su subclase NSMutableString es inmutable. Esta clase contiene una colección de métodos para trabajar con cadenas. Se declara de la siguiente manera:

class NSString : NSObject

Considere una declaración de objetivo-c simple como se muestra a continuación:

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

NSStrings se puede asignar fácilmente a cadenas de JavaScript.

Formación

Esta sección explica cómo realizar el cálculo de referencias en matrices. Tomemos primero un ejemplo del entorno iOS.

Declaración de matriz

class NSArray : NSObject

Aquí,

NSArray se utiliza para gestionar la colección ordenada de objetos denominados matrices. Se utiliza para crear una matriz estática. Su subclaseNSMutableArray se utiliza para crear matrices dinámicas.

Considere que los objetos NSArray se pueden crear utilizando literales de matriz como se muestra a continuación:

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

Ahora, podemos mapear esta matriz en JavaScript como se muestra a continuación:

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

Esto devolverá la salida como falsa.

Declaración de matriz de Android

Las matrices de Java se definen en java.util.Arrays. Esta clase contiene varios métodos para manipular matrices. A continuación se muestra un ejemplo:

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

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

Clases y objetos

Las clases y los objetos son conceptos básicos de la programación orientada a objetos. La clase es un prototipo definido por el usuario. El objeto es una instancia de clase. La clase representa el conjunto de propiedades o métodos que son comunes a todos los objetos de un tipo. Entendamos las clases y los objetos nativos para ambos entornos de desarrollo móvil.

Entorno Android

Las clases Java y Kotlin tienen identificadores únicos indicados por el nombre completo del paquete.

Por ejemplo,

android.view.View- Es una clase de interfaz de usuario básica para el diseño de la pantalla y la interacción con el usuario. Podemos acceder a esta clase en JavaScript como se muestra a continuación:

const View = android.view.View;

Primero, importamos la clase usando la siguiente declaración:

import android.view.View;

A continuación, cree una clase como se indica a continuación:

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

En la misma clase anterior, podemos acceder a la función de JavaScript usando el siguiente código:

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

De manera similar, podemos acceder a interfaces, constantes y enumeraciones dentro de los paquetes java.lang.

Entorno iOS

Las clases de Objective-C se definen en dos secciones @interface y @implementation. La definición de clase comienza con la palabra clave@interface Seguido por el interface(class)nombre. En Objective-C, todas las clases se derivan de la clase base llamada NSObject.

Es la superclase de todas las clases de Objective-C. La clase Círculo simple se define como se muestra a continuación:

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

Considere una clase con un método como se muestra a continuación:

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

Esta clase se puede convertir a javascript usando el siguiente código:

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

JavaScript instanceofEl operador se utiliza para verificar si un objeto hereda de una clase determinada. Esto se puede definir como:

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

Aquí,

Las instancias de Objective-C se crean utilizando métodos alloc, init o nuevos. En el ejemplo anterior, podemos crear fácilmente la inicialización de objetos usando un nuevo método como se muestra a continuación:

var obj = MyClass.new();

Del mismo modo, puede acceder a propiedades y métodos estáticos.