Нативная разработка мобильных приложений



Download 3,69 Mb.
Pdf ko'rish
bet195/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   191   192   193   194   195   196   197   198   ...   228
Bog'liq
Нативная разработка мобильных приложений

catalog.json
и неявно соответствовать 
требованиям контракта 
get
и 
size
источника данных 
BookDataSource
.
Теперь нам не нужна статическая структура данных 
SAMPLE_DATA
в классе 
Book
, и мы можем удалить ее. Одной из удобных возможностей в Android Stu
-
dio является поддержка рефакторинга. Кроме переименования методов или 
переменных по всему проекту, эта возможность позволяет также выполнить 
безопасное удаление переменной, когда фактическое удаление выполняется, 
только если переменная больше нигде не используется. Попробуйте выпол
-
нить эту операцию с переменной 
Book.SAMPLE_DATA
и убедитесь, что это безопас
-
ное удаление.
iOS
Самый простой способ работы с форматом JSON в iOS основан на использова
-
нии встроенного протокола 
Codable
. Этот протокол является комбинацией про
-
токолов 
Encodable
и 
Decodable
. Они помогают компилятору Swift анализировать 
исходный код.
За дополнительной информацией о протоколе 
Codable
обращайтесь к гла
-
ве 12. А сейчас рассмотрим пример, иллюстрирующий простоту обработки 
данных JSON с помощью протокола 
Codable

Добавим поддержку 
Codable
в структуру 
Book
:
struct Book: Codable {
let title: String
let authors: [String]
let isbn: String
let pageCount: Int
let fiction: Bool
}


Переключение слоя данных на использование JSON 

307
Вот и все. Обратите также внимание, что мы удалили свойство 
sampleData
из 
определения объекта. Это сделано намеренно, потому что теперь в 
ListData­
Source
мы будем использовать недавно созданный файл 
catalog.json
с каталогом 
книг вместо 
sampleData
.
Вот обновленная версия 
ListDataSource
:
class ListDataSource: NSObject {
lazy var data: [Book] = {
do {
guard let rawCatalogData =
try? Data(contentsOf:
Bundle.main.bundleURL.appendingPathComponent("catalog.json")) else {
return []
}
return try JSONDecoder().decode([Book].self, from: rawCatalogData)
} catch {
print("Catalog.json was not found or is not decodable.")
}
return []
}()
}
extension ListDataSource: UITableViewDataSource {
func tableView(_ tableView: UITableView, 
numberOfRowsInSection section: Int) ­> Int {
return data.count
}
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) ­> UITableViewCell {
// Получить ячейку из пула свободных ячеек
let cell =
tableView.dequeueReusableCell(withIdentifier: "CatalogTableViewCell",
for: indexPath)
// Найти книгу, соответствующую заполняемой ячейке
let book = data[indexPath.row]
// Заполнить метку с заголовком ячейки названием книги
cell.textLabel?.text = book.title
return cell
}
}
Мы добавили новое свойство 
data
с отложенной инициализацией (
lazy
) для 
хранения массива книг. При первом обращении к свойству содержимое фай
-
ла 
catalog.json
будет прочитано в объект 
rawCatalogData
с типом 
Data
и передано 
объекту 
JSONDecoder
, который преобразует этот объект в тип 
[Book]
.
Обратите внимание, что это свойство имеет тип 
[Book]
, а не просто 
Book

Причина в том, что файл JSON на самом деле содержит массив объектов. Ком
-
пилятор Swift правильно интерпретирует это объявление при динамическом 
преобразовании 
catalog.json
в объекты. Если файл не будет найден или компи
-
лятору Swift не удастся его декодировать, в результате будет получен пустой 
массив 
[]
.


308

Моделирование каталога библиотеки
Теперь дополнительно изменим код поддержки табличного представления 
в соответствии с протоколом 
UITableViewDataSource
. Вот строки, на которые нуж
-
но обратить внимание:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
Обратите также внимание на 
data[indexPath.row]
внутри метода 
table View 
(_:cellForRowAt:)
.
Соберите и запустите приложение, и вы увидите, что оно работает так же, 
как раньше, – отображает список книг, доступных в библиотеке, – но теперь 
книги передаются в табличное представление динамически, через файл JSON, 
включенный в пакет приложения.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   191   192   193   194   195   196   197   198   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish