web-dev-qa-db-ja.com

「Set <NSObject>」には「anyObject」という名前のメンバーがありません-Xcode 6.3

要素が選択されているかどうかを確認しています。

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
{
    // First, see if the game is in a paused state
    if !gamePaused
    {
        // Declare the touched symbol and its location on the screen
        let touch = touches.anyObject! as? UITouch
        let location = touch.locationInNode(symbolsLayer)

これは以前はXcode 6.2で正常にコンパイルされていましたが、6.3のアップデートでは、「let touch = touches.anyObject!as?UITouch」という行でエラーがスローされます。

「セット」には「anyObject」という名前のメンバーがありません

多くの同様の質問を読みましたが、「値を使用するには、最初に「アンラップ」する必要があります」と頭を抱えるようには思えません。特に回答が通知に焦点を当てているように見えるためです。

どうもありがとうございます。 W

23
Willie
let touch =  touches.first as? UITouch

.firstを使用すると、UITouchの最初のオブジェクトにアクセスできます。

Xcode 6.3はSwift(1.2)の更新バージョンを使用するため、古いコードをSwift 1.2に変換する必要があります(編集->変換->最新のSwiftへ) )。

Swift 1.2は、Set(Objective-Cの古いバージョン)ではなくNSSet(Swiftの新機能)を使用します。したがって、touchbegan関数もパラメータをNSSetからSetに変更します。

詳しくは これを参照

22
Weihong Chen

これはsymbolsLayerの複数のタッチをチェックします

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
{
    // First, see if the game is in a paused state
    if !gamePaused
    {
        // Declare the touched symbol and its location on the screen
        for touch: AnyObject in touches {
            let location = (touch as! UITouch).locationInNode(symbolsLayer)
        }
    }
}
3
martin meincke