Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
TexHuK
9 / 9 / 0
Регистрация: 19.10.2011
Сообщений: 102
08.09.2015, 09:25     Не проходит инициализация #1
Приветствую!

Изучаю урок 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?
в общем у меня кораблик не появляется, по какой причине?

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

Не проходит выборка jQuery
Резервирование не проходит Oracle
Не проходит ping Сети
Assembler Что такое инициализация сегментов или инициализация регистров?
Не проходит проверка
Проходит конкурс
C# MVC Валидация не проходит
Почему при указании пути через имя компа сканирование не проходит, а через IP - проходит?
Не проходит авторизацию Java EE
C++ Builder БД Не проходит компиляция
SQL Server Не проходит запрос
MySQL Не проходит запрос

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

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

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

я понимаю, что я переопределяю его, но он то не переопределяется) хотя все компилирует..
пришлось использовать как обычно топорные методы, потому как объяснений я не нашел.
Koshik
 Аватар для 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
}
Yandex
Объявления
17.10.2015, 16:00     Не проходит инициализация
Ответ Создать тему
Опции темы

Текущее время: 19:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru