Форум программистов, компьютерный форум, киберфорум
Наши страницы
Swift
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
1

Не проходит инициализация

08.09.2015, 09:25. Просмотров 673. Ответов 3
Метки нет (Все метки)

Приветствую!

Изучаю урок https://youtu.be/CpIoHPUyu8s
по написанию игры, и тут столкнулся с такой пока не очень понятной проблемкой.
Судя по уроку, игра писалась на старом swift-е
и в новой версии как-то не очень понятно? почему функция не работает так как надо

если взглянуть на https://youtu.be/CpIoHPUyu8s?t=16m49s
эту функцию из урока, то новый свифт переделывает ее по другому, а точнее
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
override init(size: CGSize) {
        super.init(size: size)
        self.backgroundColor = SKColor.blackColor()
        player = SKSpriteNode(imageNamed: "gun.png")
        
        player.position = CGPointMake(self.frame.size.width/2, player.size.height/2 + 20)
        
        self.addChild(player)
        
        self.physicsWorld.gravity = CGVectorMake(0, 0)
        self.physicsWorld.contactDelegate = self
    }
 
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
а в уроке начинается с init(size: CGSize) без override
и еще добавляется функция required init?
в общем у меня кораблик не появляется, по какой причине?

ставил брекпоинты в этой функции? они не срабатывают, как ее запустить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2015, 09:25
Ответы с готовыми решениями:

Инициализация вью
Привет. Небольшой вопросик по обжективу, как из си кода (внизу исходника)...

NSString *const и инициализация им NSURL
Добрый день! Что можете посоветовать в такой ситуации: Разбираю данные...

Не проходит инициализация CAN Stm32
Здравствуйте! Использую Cube и STM32F4Discovery пытаюсь наладить CAN шину, но...

Не проходит инициализация TWI
Добрый день! Мучаюсь с TWI Хочу в учебных целях подключить внешнюю память...

Не проходит инициализация переменной
Всем привет! Есть небольшая проблемка с инициализацией переменной Counts, не...

3
WE-St0r
0 / 0 / 0
Регистрация: 04.09.2015
Сообщений: 2
08.09.2015, 21:26 2
Урок я не могу посмотреть, но обьясню то, что вижу. Override означает, что вы в своем классе-наследнике переопределяете данный инициализатор. Required значит, что переопределение этого инициализатора необходимо при наследовании. В вашем случае должен вызваться один из инициализаторов. Тот, который required, содержит строку, которая вызывает ошибку в приложении. Для наглядности можете в начале обоих инициализаторов произвести вывод в консоль. При инициалицировании обьекта в консоль вывалится сообщение от одного из инициализаторов. Вставьте ваш код в тот, который вызывается. А вообще советую почитать документацию по свифту. Там про все эти, и многие другие, дерективы много чего сказано.

Добавлено через 18 минут
Урок я не могу посмотреть, но обьясню то, что вижу. Override означает, что вы в своем классе-наследнике переопределяете данный инициализатор. Required значит, что переопределение этого инициализатора необходимо при наследовании. В вашем случае должен вызваться один из инициализаторов. Тот, который required, содержит строку, которая вызывает ошибку в приложении. Для наглядности можете в начале обоих инициализаторов произвести вывод в консоль. При инициалицировании обьекта в консоль вывалится сообщение от одного из инициализаторов. Вставьте ваш код в тот, который вызывается. А вообще советую почитать документацию по свифту. Там про все эти, и многие другие, дерективы много чего сказано.
0
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
08.09.2015, 22:07  [ТС] 3
в том то и дело, что такие моменты мало где описываются. Почему было так, стало так, и так каждый раз, с каждой новой версией.

я понимаю, что я переопределяю его, но он то не переопределяется) хотя все компилирует..
пришлось использовать как обычно топорные методы, потому как объяснений я не нашел.
0
Koshik
1 / 1 / 0
Регистрация: 07.04.2015
Сообщений: 5
17.10.2015, 16:00 4
Что касается override - то в swift 2.0 его не пишут только для init() с параметрами. Если входные параметры отсутствуют (void), то override не используется.
Так же прошу обратить внимание что теперь (со второй версии стрижа) super.init указывается в самом конце переопределяемой функции.
Извиняюсь что код выделен как с++, но это Swift
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import Foundation
 
class withParam: NSObject{
    init(param: Int){
        self.someVar = param
        //Обратите внимание
        //super.init вызывается самым последним!
        super.init()
    }
    var someVar: Int
}
 
class withoutParam: NSObject{
    override init(){
        someVar = 0
        //Обратите внимание
        //super.init вызывается самым последним!
        //иначе выдает ошибку
        //Property 'self.someVar' not initialized at super.init call
        super.init()
    }
    var someVar: Int
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2015, 16:00

Что такое инициализация сегментов или инициализация регистров?
Подскажите, что такое инициализация сегментов или инициализация регистров? Вот...

Почему при указании пути через имя компа сканирование не проходит, а через IP - проходит?
Всем доброго времени суток, Ситуация такая - Есть 3 компа с Windows 7 на...

Не проходит авторизация
Доброго времени суток. Помогите пожалуйста найти проблему: Для авторизации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru