<aside> 💡 Твои навыки в iOS разработке для этого задания могут быть любыми. Однако, прохождение этого урока подскажет тебе, какую оценку ты бы получил по моей шкале сеньерности. В конце ты найдешь условия подсчета баллов.

</aside>

В оригинале это задание решается через https://code.yandex-team.ru/ или любой другой редактор кода без подсветки. Для чистоты эксперимента используйте его или аналоги.

Задание

class AwesomeData {
    let id: String
    let awesomeField: Int
    let date: Date
}
 
class AwesomeService {
 
    let api: Api = Api()
    
    func getAwesomeData(completion: (Result<[AwesomeData], Error>) -> Void) {
        api.get(.awesomeData) { data, error in
           if let error = error {
               completion(.error(error))
           } else if let data = data {
               completion(.success(data))
           } else {
               completion(.error(.unknown))
           }
        }
    }
}
 
class AwesomeViewController: UIViewController {
 
    var timer: Timer?
    let service: AwesomeService = AwesomeService()
    let awesomeSet: Set<AwesomeData> = [:]
    let button = UIButton()

    override func viewDidLoad() {
        timer = Timer.scheduledTimer( 
            timeInterval: 1,
            target: self, 
            selector: #selector(runTimedCode)
            userInfo: nil, 
            repeats: true
        ) 
				button.addTarget(
            self,
            action: #selector(buttonTap),
            for: .touchUpInside
        )
    }
    
    @objc
    func runTimedCode() {
        loadData()
    }
    
    func loadData() {
        service.getAwesomeData { result in
            switch result {
                case .success(let data):
                    data.forEach {
                        awesomeSet.insert($0)
                    }
                case .failure:
                    break
            }
        }
    }
    
    func buttonTap() {
        let first = awesomeSet.first
        print(first) 
    }
}

Краткое описание, что здесь происходит:

У нас есть 3 сущности: AwesomeData, AwesomeService, AwesomeViewController

get(_ type: RequestType, closure: @escaping ([AwesomeData]?, Error?) -> Void)) который обращается к серверу за данными.