Назад к задачам
Т-БанкПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
10
Создать менеджер для объединения треков из нескольких альбомов
Компании, где спрашивали:
Условие задачи
Необходимо реализовать менеджер, который собирает списки треков из разных альбомов и выводит объединённый результат.
struct Song: CustomStringConvertible {
let title: String
var description: String { title }
}
protocol AlbumProvider {
func loadSongs(albumId: String, completion: @escaping ([Song]) -> Void)
}
final class AlbumService: AlbumProvider {
func loadSongs(albumId: String, completion: @escaping ([Song]) -> Void) {
DispatchQueue.global().async {
let songs: [Song]
switch albumId {
case "1":
songs = [
Song(title: "One, 1"),
Song(title: "Two, 1"),
Song(title: "Three, 1"),
Song(title: "Four, 1")
]
case "2":
songs = [
Song(title: "One, 2"),
Song(title: "Two, 2"),
Song(title: "Three, 2")
]
case "3":
songs = [
Song(title: "One, 3"),
Song(title: "Two, 3")
]
default:
songs = []
}
DispatchQueue.main.asyncAfter(deadline: .now() + Double.random(in: 0.1...0.4)) {
completion(songs)
}
}
}
}
final class SongsManager {
let albumService = AlbumService()
func loadSongs(albumIds: [String], completion: @escaping ([Song]) -> Void) {
// Реализуйте загрузку треков из всех переданных альбомов и верните единый массив
// Написать код
}
}
let manager = SongsManager()
let albumIds: [String] = ["1", "2", "3"]
manager.loadSongs(albumIds: albumIds) { songs in
// вывести объединённый список треков
print(songs)
}
RunLoop.main.run(until: Date(timeIntervalSinceNow: 3))