Swift dispatch_after throw不是前缀一元运算符错误

时间:2014-10-09 18:05:53

标签: multithreading swift grand-central-dispatch dispatch

我有以下代码:

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

任何想法是什么问题?

2 个答案:

答案 0 :(得分:9)

^{...}是Objective-C语法。您不需要^

答案 1 :(得分:0)

这是将一个闭包(即一个objective-c块)传递给swift函数的正确方法:

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