2015-04-11 1 views
23

Я проверяю, чтобы увидеть, если выбран элемент«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 = touchhes.anyObject! в виде? UITouch «бросает ошибку:

„Set“не имеет элемента с именем„anyObject“

Я прочитал много подобного вопроса, но я не могу показаться, чтобы обернуть вокруг моей головы» Для того, чтобы использовать значению, вам нужно «разворачивать» это в первую очередь.»Тем более, что ответы, кажется, сосредотачиваются на уведомлениях.

Большое спасибо. W

+0

Дубликат http://stackoverflow.com/questions/28771896/overriding-method-with-selector-touchesbeganwithevent - несовместимый тип? –

+0

Спасибо, Мартин Р. Я пробовал это, но, похоже, это не совсем то, в чем проблема, сменившись на то, что вы предложили «переопределить func touchhesBegan (касается: Set , withEvent event: UIEvent) { если коснуться = touchhes.first as? UITouch {«возвращает ошибку». Set не имеет члена с именем «первым». Именно поэтому он как-то связан с классификацией как массивом – Willie

+0

Странно, код компилируется в моем проекте Xcode 6.3. –

ответ

20
let touch = touches.first as? UITouch 

.first может позволить вам получить доступ к первому объекту UITouch.

Поскольку Xcode 6.3 использует обновленную версию Swift (1.2), вам необходимо преобразовать старый код в Swift 1.2 (Edit -> convert -> To lastest Swift).

Swift 1.2 использует Set (новый в Swift) вместо использования NSSet (старый в Objective-C). Таким образом, функция touchbegan также изменяет свои параметры с NSSet на Set.

Для получения дополнительной информации, refer this

+0

Пожалуйста, объясните, добавив еще несколько ссылок или ссылок для улучшения ответа. – TheUknown

+0

Это ссылка https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIRes ponder_Class/index.html # // apple_ref/occ/instm/UIResponder/touchhesBegan: withEvent: –

+2

Спасибо. Можете ли вы отредактировать свой ответ и добавить его? и объяснять больше, так что все понимают. SO не предназначен для обмена ссылками ТОЛЬКО, но объясните и дайте ссылку ссылки – TheUknown

3

Этот чек будет на несколько касаний в 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) 
     } 
    } 
} 
+0

Это, похоже, решило это! Большое спасибо Мартину! – Willie

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

  • Нет связанных вопросов^_^