Q:

why is performSelector not present in swift

apparently the following is not available in swift anymore:
[self performSelector:@selector(onFlip) withObject:nil afterDelay:0.3];

why is this the case if the following is still present:
NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: singleTapSelector, object: nil)

doesn't nsobject.cancel work with performSelector?  why have the cancel functionality but not the perform functionality? 

A:

Use 
NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: "onFlip", userInfo: nil, repeats: false)

instead.  No idea why the other one is not available. 

A:

We can easily unlock these methods in Swift 1.x!  Yay! 
These methods from the perfromSelector family actually exist in Swift but they were artificially hidden (by design, I think) prior Swift 2.0.  They can be unveiled using swizzling and some Objective-C runtime hacks right in Swift. 
Just add this extension file NSObject+PerformSelector.swift and prefix all calls with  symbol. 
In your case the code:
[self performSelector:@selector(onFlip) withObject:nil afterDelay:0.3];

can be rewritten in Swift like this:
self.performSelector("onFlip", withObject: nil, afterDelay: 0.3)

With using this magical category (class extension):
NSObject+PerformSelector.swift
import Foundation

private var dispatchOnceToken: dispatch_once_t = 0

private var selectors: [Selector] = [
    "performSelector:",
    "performSelector:withObject:",
    "performSelector:withObject:withObject:",
    "performSelector:withObject:afterDelay:inModes:",
    "performSelector:withObject:afterDelay:",
]

private func swizzle() {
    dispatch_once(&dispatchOnceToken) {
        for selector: Selector in selectors {
            let selector = Selector("\(selector)")
            let method = class_getInstanceMethod(NSObject.self, selector)

            class_replaceMethod(
                NSObject.self,
                selector,
                method_getImplementation(method),
                method_getTypeEncoding(method)
            )
        }
    }
}

extension NSObject {

    func performSelector(selector: Selector) -> AnyObject? { 
        swizzle()
        return self.performSelector(selector)
    }

    func performSelector(selector: Selector, withObject object: AnyObject?) - > AnyObject? { 
        swizzle()
        return self.performSelector(selector, withObject: object)
    }

    func performSelector(selector: Selector, withObject object1: AnyObject?,  withObject object2: AnyObject?) - > AnyObject? { 
        swizzle()
        return self.performSelector(selector, withObject: object1, withObject: object2)
    }

    func performSelector(selector: Selector, withObject object: AnyObject?,  afterDelay delay: NSTimeInterval, inModes modes: [AnyObject?]?) { 
        swizzle()
        self.performSelector(selector, withObject: object, afterDelay: delay, inModes: modes)
    }

    func performSelector(selector: Selector, withObject object: AnyObject?,  afterDelay delay: NSTimeInterval) {
        swizzle()
        self.performSelector(selector, withObject: object, afterDelay: delay)
    }

}

A:

func performFlipOnDelay() {
  let delayInSeconds = 1.0
  let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
  dispatch_after(delay, dispatch_get_main_queue()) { 
     onFlip();
  }
}

Another round about answer would be the above using GCD to add a delay time for an action to be performed

