NativeScript - APIs nativas usando JavaScript
Esta seção explica sobre a visão geral de acessar APIs nativas usando JavaScript.
Marshalling
O NativeScript Runtime fornece conversão de tipo implícita para plataformas Android e iOS. Esse conceito é conhecido como marshalling. Por exemplo, a paltform NativeScript-iOS pode converter implicitamente os tipos de dados JavaScript e Objective-C de maneira semelhante, Java / Kotlin pode ser facilmente mapeado para tipos e valores de projeto JavaScript. Vamos entender como realizar o marshalling em cada tipo um por um brevemente.
Valores Numéricos
Podemos converter facilmente os tipos de dados numéricos do iOS e do Android em números de JavaScript. A conversão numérica simples para iOS em JavaScript é definida abaixo -
console.log(`max(7,9) = ${max(7,9)}`);
Aqui,
A função nativa max () é convertida em número JavaScript.
Ambiente Android
Java oferece suporte a diferentes tipos numéricos como byte, short, int, float, double e long. JavaScript tem apenas tipo de número.
Considere uma classe Java simples mostrada abaixo -
class Demo extends java.lang.Object {
public int maxMethod(int a,int b) {
if(a>b) {
return a;
} else {
return b;
}
}
}
Aqui,
O código acima contém dois argumentos inteiros. Podemos chamar o objeto de código acima usando JavaScript, conforme mostrado abaixo -
//Create an instance for Demo class
var obj = new Demo();
//implicit integer conversion for calling the above method
obj.maxMethod(7,9);
Cordas
As strings do Android são definidas em java.lang.string e as strings do iOS são definidas no NSSring. Vamos ver como realizar o marshalling em ambas as plataformas.
Android
Strings são imutáveis, mas os buffers de String suportam strings mutáveis.
O código abaixo é um exemplo de mapeamento simples -
//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
A classe booleana é definida em java.lang.Boolean. Esta classe envolve um valor booleano em um objeto. Podemos facilmente converter booleano em String e vice-versa. Um exemplo simples é definido conforme abaixo -
//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
A classe NSString é imutável, mas sua subclasse NSMutableString é imutável. Esta classe contém uma coleção de métodos para trabalhar com strings. É declarado como abaixo -
class NSString : NSObject
Considere uma declaração object-c simples conforme mostrado abaixo -
NSString *str = @"nativescript";
//convert the string to uppercase
NSString *str1;
str1 = [str uppercaseString];
NSLog(@"Uppercase String : %@\n", str1 );
NSStrings podem ser facilmente mapeados para strings JavaScript.
Array
Esta seção explica como realizar o marshalling em matrizes. Vamos primeiro dar um exemplo de ambiente iOS.
Declaração de Array
class NSArray : NSObject
Aqui,
NSArray é usado para gerenciar uma coleção ordenada de objetos chamados arrays. É usado para criar array estático. Sua subclasseNSMutableArray é usado para criar matrizes dinâmicas.
Considere que os objetos NSArray podem ser criados usando literais de matriz, conforme mostrado abaixo -
let array: NSArray = ["React","Vue","TypeScript"]
Agora, podemos mapear essa matriz em JavaScript, conforme mostrado abaixo -
//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);
Isso retornará a saída como falsa.
Declaração de array Android
Arrays Java são definidos em java.util.Arrays. Esta classe contém vários métodos para manipular matrizes. Um exemplo é mostrado abaixo -
//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 e Objetos
Classes e objetos são conceitos básicos da Programação Orientada a Objetos. Classe é um protótipo definido pelo usuário. O objeto é uma instância de classe. Classe representa o conjunto de propriedades ou métodos comuns a todos os objetos de um tipo. Vamos entender as classes e objetos nativos para ambos os ambientes de desenvolvimento móvel.
Ambiente Android
As classes Java e Kotlin têm identificadores exclusivos indicados pelo nome completo do pacote.
Por exemplo,
android.view.View- É uma classe de interface de usuário básica para layout de tela e interação com o usuário. Podemos acessar essa classe em JavaScript conforme mostrado abaixo -
const View = android.view.View;
Primeiro, importamos a classe usando a instrução abaixo -
import android.view.View;
Em seguida, crie uma classe conforme fornecido abaixo -
public class MyClass {
public static void staticMethod(context) {
//create view instance
android.view.View myview = new android.view.View(context);
}
}
Na mesma classe acima, podemos acessar a função JavaScript usando o código abaixo -
const myview = new android.view.View(context);
Da mesma forma, podemos acessar interfaces, constantes e enumerações nos pacotes java.lang.
Ambiente iOS
As classes Objective-C são definidas em duas seções @interface e @implementation. A definição da classe começa com a palavra-chave@interface seguido pelo interface(class)nome. Em Objective-C, todas as classes são derivadas da classe base chamada NSObject.
É a superclasse de todas as classes Objective-C. A classe Simple Circle é definida conforme mostrado abaixo -
@interface Circle:NSObject {
//Instance variable
int radius;
}
@end
Considere uma classe com um método conforme mostrado abaixo -
@interface MyClass : NSObject
+ (void)baseStaticMethod;
@end
Esta classe pode ser convertida para javascript usando o código abaixo -
function MyClass() { /* native call */ };
Object.setPrototypeOf(MyClass, NSObject);
BaseClass.baseStaticMethod = function () { /* native call */ };
JavaScript instanceofoperador é usado para verificar se um objeto herda de uma determinada classe. Isso pode ser definido como -
var obj = MyClass.alloc().init(); // object creation
console.log(obj instanceof NSObject); //return true
Aqui,
Instâncias Objective-C são criadas usando aloc, init ou novos métodos. No exemplo acima, podemos criar facilmente a inicialização do objeto usando o novo método abaixo -
var obj = MyClass.new();
Da mesma forma, você pode acessar métodos e propriedades estáticos.