<aside> 💡 Твои навыки в iOS разработке для этого задания могут быть любыми. Однако, прохождение этого урока подскажет тебе, какую оценку ты бы получил по моей шкале сеньерности. В конце ты найдешь условия подсчета баллов.
</aside>
В оригинале это задание решается через https://code.yandex-team.ru/ или любой другой редактор кода без подсветки. Для чистоты эксперимента используйте его или аналоги.
buttonTap
должен выводить в консоль элемент из awesomeSet
c минимальной датой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
AwesomeData
- хранит состояние.AwesomeService
- сервис по загрузке данных из сети.Api
- внутренний класс. Мы знаем, что у него есть метод.get(_ type: RequestType, closure: @escaping ([AwesomeData]?, Error?) -> Void))
который обращается к серверу за данными.
AwesomeViewController
- содержит в себе таймер. Каждую секунду таймер вызывает метод runTimedCode()
, который в свою очередь вызывает loadData()
.