Практические примеры работы с массивами Swift
В iOS-разработке массивы часто используются для работы с данными — от отображения списков в UITableView и UICollectionView до обработки сетевых запросов и управления состоянием приложения. В этой статье мы разберем практические примеры использования массивов в Swift, покажем, как эффективно применять методы map, filter, reduce и другие для решения реальных задач в iOS-разработке.
Содержание:
Практические примеры из iOS разработки
Работа с таблицами и коллекциями
Использование массивов для представления данных в таблицах и коллекциях.
import UIKit
// Модель данных
struct Item {
let title: String
let description: String
}
// Контроллер таблицы
class TableViewController: UITableViewController {
// Массив элементов
var items: [Item] = [
Item(title: "Элемент 1", description: "Описание 1"),
Item(title: "Элемент 2", description: "Описание 2"),
Item(title: "Элемент 3", description: "Описание 3")
]
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
// Настройка количества строк
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
// Настройка содержимого ячеек
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.title
cell.detailTextLabel?.text = item.description
return cell
}
// Обработка выбора строки
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedItem = items[indexPath.row]
print("Выбран элемент: \(selectedItem.title)")
}
}Управление данными в приложении
Пример использования массивов для хранения и управления данными в приложении.
import Foundation
// Модель данных для заметки
struct Note: Codable {
let id: UUID
var title: String
var content: String
let createdAt: Date
var updatedAt: Date
}
// Сервис для работы с заметками
class NoteService {
private let userDefaults = UserDefaults.standard
private let notesKey = "notes"
private(set) var notes: [Note] = []
init() {
loadNotes()
}
// Загрузка заметок из хранилища
private func loadNotes() {
if let data = userDefaults.data(forKey: notesKey),
let storedNotes = try? JSONDecoder().decode([Note].self, from: data) {
notes = storedNotes
}
}
// Сохранение заметок в хранилище
private func saveNotes() {
if let encodedNotes = try? JSONEncoder().encode(notes) {
userDefaults.set(encodedNotes, forKey: notesKey)
}
}
// Создание новой заметки
func createNote(title: String, content: String) -> Note {
let now = Date()
let note = Note(
id: UUID(),
title: title,
content: content,
createdAt: now,
updatedAt: now
)
notes.append(note)
saveNotes()
return note
}
// Обновление существующей заметки
func updateNote(id: UUID, title: String, content: String) -> Bool {
if let index = notes.firstIndex(where: { $0.id == id }) {
var note = notes[index]
note.title = title
note.content = content
note.updatedAt = Date()
notes[index] = note
saveNotes()
return true
}
return false
}
// Удаление заметки
func deleteNote(id: UUID) -> Bool {
if let index = notes.firstIndex(where: { $0.id == id }) {
notes.remove(at: index)
saveNotes()
return true
}
return false
}
// Поиск заметок
func searchNotes(query: String) -> [Note] {
guard !query.isEmpty else {
return notes
}
let lowercasedQuery = query.lowercased()
return notes.filter {
$0.title.lowercased().contains(lowercasedQuery) ||
$0.content.lowercased().contains(lowercasedQuery)
}
}
}