2016-12-24 11 views
0

私はスウィフトの本でプログラミング例を超えるだろうとこのようになります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(別名「Double.Type」) を「CFTimeInterval」(別名「Double」)の引数に指定します。

(1)このエラーの意味と(2)修正方法を知りませんか?

+0

が何この初期化子で 'time'パラメータが意味することになっていますか? – Alexander

+0

@Alexander - 'time'パラメータは、ゲームが終了したときにゲームが取得した時間を表す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

心配はいりません。しかし、コードにスペースを入れてください。そして、それは幸いなことではない。 – Alexander

+0

@SamuelWeir Btw、Swiftの古いバージョンを使用していますか?現代のSwiftはこのような場合にエラーを返し、 'CFTimeInterval()'を使用して初期化子を呼び出すか、明示的に 'CFTimeInterval.self'を使ってその型を参照するようにします。 – Alexander

関連する問題