2016-12-24 3 views
0

Я собираюсь через пример программирования в книге на Swift и иметь инициализатор к SKScene который выглядит следующим образом:Невозможно преобразовать значение типа «CFTimeInterval.Type» в «CFTimeInterval»?

class GameOverScene: SKScene 
{ 
    init(size:CGSize,won:Bool,time:CFTimeInterval) 
    { 
     ........... 
    } 
} 

Это инициализатор затем вызывается в другой части программы с помощью следующей строки:

let gameOverScene=GameOverScene(size:self.size,won:true,time:CFTimeInterval) 

кажется, что все это должно быть достаточно простым, но затем я получаю эту странную ошибку, глядя, что говорит:

Невозможно преобразовать значение типа ' CFTimeInterval.Type (aka 'Double.Type') до ожидаемого типа аргумента 'CFTimeInterval' (он же 'Double').

Кто-нибудь знает (1), что означает эта ошибка, и (2) как его исправить?

+0

Что такое 'time' параметр в этом инициализаторе должно означать? – Alexander

+0

@Alexander - параметр «время» - это просто переменная CFTimeInterval, которая описывает количество времени, которое игра сделала, когда игра закончилась. –

ответ

2

CFTimeInterval - это тип. Это не пример CFTimeInterval, который вы можете передать в эту функцию.

CFTimeInterval является typealias по Double. Таким образом, эта функция ожидает значение типа Double. 1.0, NaN, -1.5, Double.pi все действительные экземпляры Double. Но то, что вы пытаетесь дать, это CFTimeInterval, что относится к самому типу.

Это, например, будет работать:

let gameOverScene = GameOverScene(size: self.size, won: true, time: 1.23) 
+0

Спасибо. Я чувствую себя идиотом. Я пытался передать сам тип «CFTimeInterval» в качестве аргумента, а не понимать, что вызываемым был элемент, который был «CFTimeInterval». Я вводил в заблуждение синтаксис, используемый для объявления init с синтаксисом, используемым для вызова init. –

+0

Не беспокойтесь. Но, пожалуйста, введите некоторые пробелы в свой код. Orelseitalljustreadslikethis, andit'snotverypleasanttoworkwith. – Alexander

+0

@SamuelWeir Кстати, вы используете старую версию Swift? Modern Swift дает вам ошибку в таком случае, напоминая вам использовать 'CFTimeInterval()' для вызова некоторого инициализатора или использовать явно запись 'CFTimeInterval.self' для обозначения типа. – Alexander

Смежные вопросы