NativeScript - собственные API с использованием JavaScript
В этом разделе объясняется обзор доступа к собственным API-интерфейсам с помощью JavaScript.
Маршаллинг
Среда выполнения NativeScript обеспечивает неявное преобразование типов для платформ Android и iOS. Эта концепция известна как маршаллинг. Например, paltform NativeScript-iOS может неявно преобразовывать типы данных JavaScript и Objective-C аналогично, Java / Kotlin можно легко сопоставить с типами и значениями проектов JavaScript. Давайте вкратце разберемся, как выполнять маршаллинг в каждом типе.
Числовые значения
Мы можем легко преобразовать числовые типы данных iOS и Android в числа JavaScript. Простое числовое преобразование для iOS в JavaScript определено ниже -
console.log(`max(7,9) = ${max(7,9)}`);
Вот,
Собственная функция max () преобразуется в число JavaScript.
Среда Android
Java поддерживает различные числовые типы, такие как byte, short, int, float, double и long. JavaScript имеет только числовой тип.
Рассмотрим простой класс Java, показанный ниже -
class Demo extends java.lang.Object {
public int maxMethod(int a,int b) {
if(a>b) {
return a;
} else {
return b;
}
}
}
Вот,
Приведенный выше код содержит два целочисленных аргумента. Мы можем вызвать указанный выше объект кода с помощью JavaScript, как показано ниже -
//Create an instance for Demo class
var obj = new Demo();
//implicit integer conversion for calling the above method
obj.maxMethod(7,9);
Струны
Строки Android определены в java.lang.string, а строки iOS определены в NSSring. Давайте посмотрим, как выполнить маршаллинг на обеих платформах.
Android
Строки неизменяемы, но буферы String поддерживают изменяемые строки.
Ниже приведен пример простого сопоставления -
//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
Логический класс определен в java.lang.Boolean. Этот класс заключает в себе логическое значение объекта. Мы можем легко преобразовать логическое значение в String и наоборот. Простой пример определяется, как показано ниже -
//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
среда iOS
Класс NSString неизменен, но его подкласс NSMutableString неизменен. Этот класс содержит набор методов для работы со строками. Заявлено, как показано ниже -
class NSString : NSObject
Рассмотрим простое объявление objective-c, как показано ниже -
NSString *str = @"nativescript";
//convert the string to uppercase
NSString *str1;
str1 = [str uppercaseString];
NSLog(@"Uppercase String : %@\n", str1 );
NSStrings можно легко сопоставить со строками JavaScript.
Массив
В этом разделе объясняется, как выполнять маршалинг в массивах. Сначала рассмотрим пример среды iOS.
Объявление массива
class NSArray : NSObject
Вот,
NSArray используется для управления упорядоченной коллекцией объектов, называемых массивами. Он используется для создания статического массива. Его подклассNSMutableArray используется для создания динамических массивов.
Учтите, что объекты NSArray могут быть созданы с использованием литералов массива, как показано ниже -
let array: NSArray = ["React","Vue","TypeScript"]
Теперь мы можем отобразить этот массив в JavaScript, как показано ниже -
//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);
Это вернет результат как false.
Объявление массива Android
Массивы Java определены в java.util.Arrays. Этот класс содержит различные методы для управления массивами. Пример показан ниже -
//javascript array
let data = [12,45,23,56,34,78,50];
//create java array
let result = ns.example.Math.maxElement(data);
console.log(result);
Классы и объекты
Классы и объекты - основные концепции объектно-ориентированного программирования. Класс - это определенный пользователем прототип. Объект - это экземпляр класса. Класс представляет собой набор свойств или методов, общих для всех объектов одного типа. Давайте разберемся с собственными классами и объектами для обеих сред мобильной разработки.
Среда Android
Классы Java и Kotlin имеют уникальные идентификаторы, обозначаемые полным именем пакета.
Например,
android.view.View- Это базовый класс пользовательского интерфейса для компоновки экрана и взаимодействия с пользователем. Мы можем получить доступ к этому классу в JavaScript, как показано ниже -
const View = android.view.View;
Сначала мы импортируем класс, используя приведенный ниже оператор -
import android.view.View;
Затем создайте класс, как указано ниже -
public class MyClass {
public static void staticMethod(context) {
//create view instance
android.view.View myview = new android.view.View(context);
}
}
В том же классе выше мы можем получить доступ к функции JavaScript, используя следующий код -
const myview = new android.view.View(context);
Точно так же мы можем получить доступ к интерфейсам, константам и перечислениям в пакетах java.lang.
Среда iOS
Классы Objective-C определены в двух разделах @interface и @implementation. Определение класса начинается с ключевого слова@interface за которым следует interface(class)имя. В Objective-C все классы являются производными от базового класса NSObject.
Это суперкласс всех классов Objective-C. Класс Simple Circle определяется, как показано ниже -
@interface Circle:NSObject {
//Instance variable
int radius;
}
@end
Рассмотрим класс с одним методом, как показано ниже -
@interface MyClass : NSObject
+ (void)baseStaticMethod;
@end
Этот класс можно преобразовать в javascript, используя приведенный ниже код -
function MyClass() { /* native call */ };
Object.setPrototypeOf(MyClass, NSObject);
BaseClass.baseStaticMethod = function () { /* native call */ };
JavaScript instanceofОператор используется для проверки, наследуется ли объект от данного класса. Это можно определить как -
var obj = MyClass.alloc().init(); // object creation
console.log(obj instanceof NSObject); //return true
Вот,
Экземпляры Objective-C создаются с использованием методов alloc, init или new. В приведенном выше примере мы можем легко создать инициализацию объекта, используя новый метод, как показано ниже:
var obj = MyClass.new();
Точно так же вы можете получить доступ к статическим методам и свойствам.