2014-10-09 3 views
2

У меня есть следующий код:Swift dispatch_after метания не ошибка префикс унарный оператор

import SpriteKit 
import Foundation 

class GameScene: SKScene { 
    var occupiedCoordinates: NSMutableArray = NSMutableArray() 

    func addShape() { 

     //... 

     shape.position = CGPoint(x:actualX, y:actualY) 
     self.occupiedCoordinates.addObject(NSValue(CGPoint:shape.position)) 
     let halfDuration = random(min: CGFloat(0.5), max: CGFloat(5)) 

     //... 

     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2*halfDuration), dispatch_get_main_queue(), ^{ 
      self.occupiedCoordinates.removeObjectAtIndex(0) 
      }); 
    } 

} 

я использовал оригинальный отрезала GCD: Dispatch After и я получаю следующее сообщение в строке dispatch_after()

'^' is not a prefix unary operator 

любые идеи, в чем проблема?

ответ

0

Это правильный способ передать замыкание (т.е. Objective-C блок) к функции в стрижа:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * halfDuration), dispatch_get_main_queue(), {() ->() in 
    self.occupiedCoordinates.removeObjectAtIndex(0) 
}) 

или вы можете также использовать эту компактную форму:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * halfDuration), dispatch_get_main_queue()) { 
    self.occupiedCoordinates.removeObjectAtIndex(0) 
} 

Рекомендуемая литература: Closures

+0

это yiels 'не может ссылаться на '*' со списком аргументов типа (dispatch_time_t, dispatch_queue_t !, 0)' –

+0

ж шляпа типа 'halfDuration'? – Antonio

+0

на данный момент его CGFloat .. –

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