Аппликация о погоде

swift
xcode
ios
swift3

#1

Не могу исправить ошибку.
Возможно код написан на более ранней версии.
Подскажите пожалуйста, что делать?

Ошибка: Type APIWeathwrManager dos not confirm a protocol APIManager!!!

final class APIWeatherManager: APIManager {

    let sessionConfiguration: URLSessionConfiguration
lazy var session: URLSession = {
    return URLSession(configuration: self.sessionConfiguration)
}()

let apiKey: String
init(sessionConfiguration: URLSessionConfiguration, apiKey: String) {
    self.sessionConfiguration = sessionConfiguration
    self.apiKey = apiKey
}
convenience init(apiKey: String){
    self.init(sessionConfiguration: URLSessionConfiguration.default, apiKey: apiKey)
}
func fetchCurrentWeatherWith(coordinate: Coordinate, complitionHeandler: @escaping (APIResult<CurrentWeather>) -> Void){
    
    let request = ForeCastType.Current(apiKey: self.apiKey, coordinate: coordinate).request
    
    fatch(request: request, parse: { (json) -> CurrentWeather? in
        if let dictionary = json["currently"] as? [String: AnyObject]{
           return CurrentWeather(JSON: dictionary)
        }else{
            return nil
        }
    }, complitionHendler: complitionHeandler)
}

}


#2

Учить Свифт!

Вот замечательный учебник, там есть в том числе и про протоколы. Вам всего лишь нужно читать что там написано и копировать код в плейграунд)


#3

Это не верная позиция. Человек заплатил деньги за курсы, предполагая что там будет все понятно (ведь он учится по ЭТОМУ КУРСУ), а если что-то непонятно или устарело, то создатель курса всегда объяснит в чем проблема, ведь везде говорится, что по курсу научат программировать и, типа, даже новичок обретет Дзен ). И вот человек сталкивается с несоответствием видео и того что у него в компьютере. И ему говорят “Иди и ищи сам снаружи, видео устарело, а нам пофиг”.
Это все равно что в школьном учебнике, в каком-нибудь примере будет написано “А”, а на доске у МарьВасильны “Б”. И ученик спрашивает, “Как так?”, а МарьВасильна ему вместо того чтобы сказать “Алгебра шагнула вперед, учебник устарел и поэтому не А, а Б потому что… К,Л,М и Н”, говорит “Иди читай книжки и сам разбирайся. Библиотека в школе хорошая, так что Go for it!”. Но ученик пришел на урок, а топикстартер купил курсы, на которых его научат и ему подскажут. Вот когда он придет со своей программой, полной ошибок, тогда его и можно посылать, а тут нужно разъяснить, ведь это Форум по Курсам, в которых говорят: “задавайте вопросы на форуме”, а не говорят “что-то непонятно - читайте книжки, а нас больше не беспокойте” :slight_smile:

P.S. С такими ответами на форуме можно вообще снимать видео без звука и в конце написать - “Если есть вопросы, смотрите учебник” :slight_smile:


#4
final class APIWeatherManager: APIManager {

var sessionConfiguration: URLSessionConfiguration
        lazy var session: URLSession = {
            return URLSession(configuration: self.sessionConfiguration)
        } ()
        
        let apiKey: String
        
        init(sessionConfiguration: URLSessionConfiguration, apiKey: String) {
            self.sessionConfiguration = sessionConfiguration
            self.apiKey = apiKey
        }
        
        convenience init(apiKey: String) {
            self.init(sessionConfiguration: URLSessionConfiguration.default, apiKey: apiKey)
        }
        
        func fetchCurrentWeatherWith(coordinates: Coordinates, completionHandler: @escaping (APIResult<CurrentWeather>) -> Void) {
            let request = ForecastType.Current(apiKey: self.apiKey, coordinates: coordinates).request
            
            fetch(request: request, parse: { (json) -> CurrentWeather? in
                if let dictionary = json["currently"] as? [String: AnyObject] {
                    return CurrentWeather(JSON: dictionary)
                } else {
                    return nil
                }
            }, completionHandler: completionHandler)
        }
    }

Это из моего аналогичного проекта.
Проверьте:

  • 2-я строка у вас let, у меня var
  • в функции у вас fAtch а там fetch
  • в начале и конце функции написание ваше complitionHendler меня как то смущает, но проверять вам
  • и отсылку к координатам на всякий случай перепроверьте

#5

Если человек еще не прочитал БЕСПЛАТНЫЙ учебник (а это первое что он должен сделать перед тем как смотреть видео) для его же блага лучше это сделать.


#6

Так он может его и прочитал, но читать можно тоннами, а практика лучший учитель. Но это плохой учитель, если он подкреплен неработающими примерами, когда ты и так до конца не понимаешь, а тут еще и ошибку нужно найти в том, в чем не понимаешь. Хотя согласен,
что некоторых такое стимулирует вникать, а не тупо повторять :slight_smile:


#7

Ваш пример “выдает” аналогичную ошибку )

И ещё, не знаю, может так и задумано, но у Вас в примере наверно ошибка, var sessionCounfiguration: URLSessionConfiguration

наверно все-таки var sessionConfiguration… хотя может вы специально так написали.


#8

Кстати, да. Опечатка у меня в проекте. Поправил.
У меня мой вариант кода работает без ошибок, насколько я вижу. Но у меня могут быть несущественные отличия от курса в названиях структур, переменных и т.п.
У топикстартера проблема, думаю, в fetch.


#9

Практика без знания языка? Вы бы сели писать роман зная десять слов? А на предложение подучить еще слов, ответили бы “практика лучший учитель”?


#10

Некорректное сравнение. Да, не зная всего алфавита нельзя что-то написать. Но чтобы написать простую программу (для консоли или плейграунда) достаточно знать что такое переменные, for in, if else, функция, print, массивы. Просто тупо какой-нибудь перебор массива с выводом элементов через print. Используя так сказать процедурную составляющую языка. Вобщем можно написать программу зная минимум операторв и вобще не зная все ООП штуки. А зная этот минимум, уже на примерах можно стараться понять более сложное, в том числе и постичь принципы ООП. Это я типа про тех намекаю, кто когда-то разбирался в бейсике и С, и все было хорошо, а тут какие-то протоколы, делегаты, классы, инициализаторы и вот это всё :slight_smile:


#11

Здравствуйте! Вы как-то решили проблему?


#12

Т.е. вы хотите, чтобы вам все разжевали и в рот положили? А проекты за вас тоже делать?
Вы, кажется, забываете или не понимаете, что в программировании огромное количество информации и ~80% составляет самообучение.


#13

Примерно то же самое и в учебнике, вы читаете, копируете код в плейграунд (лучше ручками переписывать) и у вас что-то откладывается в голове, или у вас какие-то проблемы с его прочтением?


#14

И раз уж вы знаете как надо, много таким способом выучили?


#15

Это не я так хочу, это так должно быть на Платных Курсах. Вы путаете этот раздел форума с бесплатными форумами или, например, стековерфлоу может или какой-нибудь прости господи тостер :). Это там, намекнули на ответ, а если человек не понял или видно, что не хочет понять (что меня, честно говоря всегда бесит), то можно его послать читать книжки, потому что никто, как бы не обязан разжовывать за бесплатно. Тут же другая ситуация, клиент приобрел подписку к видео урокам, а в них ошибка, ну и он законно хочет разъяснений.
Мне это напомнило, когда я купил давно книжку Питера Нортона, где он на примере написания проги обучал ассемблеру. Но опечаток там в коде было капец, пропущеные строки, местами поменяно. Интересно их находить, понимая, что ты что-то понимаешь :slight_smile: Но не все так могут, кто-то хочет 100% работающий пример, по которому потом можно пытаться что-то понять, тем более, напоминаю, когда за это заплачены деньги, это ключевой момент.


#16

Нормально обучаюсь, и самообучаюсь (кстати учебник изучал, именно как вы и написали, ручками). Вопрос то не во мне, а в том, что человек попросил помощь по видеоуроку с ошибкой… ну я уже выше всё написал.


#17

А как вы поняли, что это код из видеоурока? Я вот этого в упор не вижу.

Для вопросов по курсу есть специальный тег, он так и называется "Курсы по Swift"
Это форум далеко не только по курсам. Я, к примеру, даже приблизительно не знаю, что в них.


#18

Я видел этот видеоурок и сталкивался с такой же ошибкой. Ваша правда, я не прав, топикстартер неправильно разместил свой вопрос (а может и правильно), так что душите его по полной :slight_smile:


Закрыл тему #19