2017-05-28 8 views
0

このプログラムはXcodeでコンパイルできません。IOSアプリケーション "Playgrounds"でのみ実行できます。 IOSアプリケーションで'Int'型の初期化子を '(Number)'型の引数リストで呼び出せません

"遊び場" - > "コード3に学び"(スウィフト3.1) - > "ミュージック・ユニバースは、" 私は、コードの下にあります

// A touch event for when your finger is moving across the scene. 

// Declaration 
struct Touch 

// The position of this touch on the scene. 

// Declaration 
var position: Point 

// The x coordinate for the point. 

// Declaration for touch.position.x 
var x: Double 

上記を単に説明するために。

let touch: Touch 
let numberOfNotes = 16 
let normalizedXPosition = (touch.position.x + 500)/1000 
let note = normalizedXPosition * (numberOfNotes - 1) 
let index = Int(note) 

最後の文ショーのエラー: 型の引数リストを持つタイプ「のInt」「(番号)」の初期化子を呼び出すことはできません。 noteIntタイプに変換するにはどうすればよいですか?

+1

'touch.position.x'を持って何種類? - 問題を示す自己完結型*の例が参考になります。 –

+0

最初の見方では、私は 'touch.position.x'型がCGFloatだと思っていましたが、' let note = normalizedXPosition *(numberOfNotes - 1) 'でコンパイル時にエラーが発生するはずではないようですIntとCGFloatの間の掛け算について。 –

+0

touch.position.xのコメントを追加しました。touch.position.xタイプは 'Double' – linjie

答えて

1

これはiPadアプリケーションSwift Playgroundsで実行されています。

スウィフトタイプのコンバージョンの苦痛を軽減するために、彼らは明らかに背後で Numberを作成しました。このミニプログラムでは、最初DoubleIntを変換することなくIntDoubleを乗算することが可能である:

let a = 5  // a is an Int 
let b = 6.3 // b is a Double 
let c = a * b // This results in c being type Number 

Numberは、読み取り専用プロパティint及び数のIntDouble表現を返すdouble

var int: Int { get } 
var double: Double { get } 

あなたがIntするindexを必要とするのであれば、このようにそれを実行します。

let index = note.int 
関連する問題