2

このメソッドを実装すると、SourceKitService が終了しました。

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!)

!を削除すると 、 できます。しかし、もちろん、コードでエラーが発生しました。完全なコード:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

    for touch: AnyObject in touches {

        let location = touch.locationInNode(self)

        if nodeAtPoint(location).name == "plane" {
            println("plane touched")
        }
    }
}
4

2 に答える 2

0

beta4 で実行し、問題なくメソッドを宣言できました。for touch: AnyObject in touches {に置き換えるAnyObjectUITouch、取得したいものにより具体的なものになるため、コンパイラエラーが発生するため、問題のように見えます: NSSet! cannot be implicitly downcast to UITouch、これは、構文が配列を型にキャストしようとすることを意味します。アイテムをキャストすることはまだできないようです。配列と UIView を使用したループの Swift での注釈エラーを参照してください。コンパイラ エラーのない同じ本文コードを次に示します。

for item in touches {

    let location = (item as UITouch).locationInNode(self)    

    if self.nodeAtPoint(location).name == "plane" {
        println("plane touched")
    }

}

エラーは、SourceKit のクラッシュを引き起こすのに十分ではありませんでした。コードに他の問題領域があるのではないでしょうか?

于 2014-08-07T06:45:04.237 に答える
0

このエラーは私にも起こりました。最初に NSSet を NSArray に変換してから for..in ループを使用することで、今のところ解決しました。これはクラッシュしませんでした:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

        super.touchesBegan(touches, withEvent: event)

        let touchArray: NSArray = touches.allObjects

        for element in touchArray {
            println("\(element)")
        }

    }
于 2014-08-07T11:03:47.367 に答える