Книги
275
Чтобы вывести эту информацию в списке, нам нужно ее организовать. Ко
-
нечно, можно передавать все эти свойства в строки списка по отдельности, но
на практике для этой цели
обычно создается модель данных, описывающая
информацию, хранимую в этих данных, – гораздо проще добавить новое поле
в общий тип, чем добавлять его в каждый метод, обрабатывающий информа
-
цию о книге.
Давайте определим объект, представляющий книгу, который мы сможем ис
-
пользовать для заполнения элементов списка. Итак, как такой объект может
выглядеть в Java и Swift? Самое замечательное, что в обоих языках определе
-
ние объекта выглядит почти одинаково.
Для представления книг в Android мы будем использовать стандартное
определение класса. Такие классы иногда называют также «моделями» или
«классами данных», но отметим, что в Kotlin последние определяются осо
-
бым образом (как вы увидите ниже). На самом деле
функционально моде
-
ли ничем не отличаются от любых других классов. Некоторые разработчики
предпочитают использовать «POJO» («Plain Old Java Objects» – простые объек
-
ты Java) – классы, которые не наследуют никаких других классов и не реали
-
зуют никаких интерфейсов, но вообще это дело вкуса. Также в классах моде
-
лей не принято использовать логические операции (методов), кроме методов
чтения/записи свойств, однако, с технической точки зрения, это совершенно
необязательно.
Согласно рекомендациям Android, предлагающим не использовать общедо
-
ступные члены, мы определим поля для хранения информации, а также мето
-
ды чтения/записи для доступа к этим полям. Вот определение нашего класса
Book
:
public class Book {
String mTitle;
String[] mAuthors;
String mIsbn;
int mPageCount;
boolean mIsFiction;
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
public String[] getAuthors() {
return mAuthors;
}
public void setAuthors(String[] authors) {
mAuthors = authors;
}
public String getIsbn() {
return mIsbn;
}
276
Вывод списка с данными
public void setIsbn(String isbn) {
mIsbn = isbn;
}
public int getPageCount() {
return mPageCount;
}
public void setPageCount(int pageCount) {
mPageCount = pageCount;
}
public boolean isFiction() {
return mIsFiction;
}
public void setFiction(boolean fiction) {
mIsFiction = fiction;
}
}
Такое определение может показаться немного громоздким для ввода вруч
-
ную, однако Android Studio с радостью возьмет рутину на себя и сгенерирует
методы чтения/записи из свойств и даже правильно подберет имена для них,
следуя правилам венгерской нотации (то есть для свойства
mName
будут сгене
-
рированы
методы
getName
и
setName
, а не
getMname
).
А теперь обратимся к Kotlin, который блистательно проявляет себя в этом
примере, позволяя записать намного более компактное определение класса
Book:
data class Book (
val title: String,
val authors: List
,
val isbn: String,
val pageCount: Int,
val isFiction: Boolean
)
Дополнительно можно включить определение конструктора без аргументов,
чтобы получить возможность создавать пустые экземпляры
Book
:
data class Book (
val title: String,
val authors: List,
val isbn: String,
val pageCount: Int,
val isFiction: Boolean
) {
constructor() : this("", mutableListOf(), "", 0, false) {
// ничего не делает
}
}
Книги
277
Этот код не только включает конструктор по умолчанию, принимающий все
поля, но также объединяет его с самим определением. Кроме того, все поля
определены
как значения
val
и, следовательно, являются неизменяемыми
(в Java такие поля можно определить с ключевым словом
final
), однако, как вы
увидите далее, нам не требуется устанавливать значения по умолчанию, кото
-
рые будут изменяться при создании экземпляра. Эти значения определяются
в конструкторе, что, в свою очередь, гарантирует наличие единственного не
-
изменного значения для каждого члена.
Теперь перейдем в Xcode. Добавьте в проект
новый файл Swift с именем
Book.swift
, выбрав в меню пункт
Do'stlaringiz bilan baham: