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.