I myself am also taking the Standford course and I got stuck here for a long time too, but after some searching, I found something from here: Xcode release notes and it mentioned something below:
Swift 1.2 is strict about checking type-based overloading of @objc
methods and initializers, something not supported by Objective-C.// Has the Objective-C selector "performOperation:". func performOperation(op: NSOperation) { /* do something */ } // Also has the selector "performOperation:". func performOperation(fn: () -> Void) { self.performOperation(NSBlockOperation(block: fn)) }
This code would work when invoked from Swift, but could easily crash
if invoked from Objective-C. To solve this problem, use a type that is
not supported by Objective-C to prevent the Swift compiler from
exposing the member to the Objective-C runtime:
- If it makes sense, mark the member as private to disable inference of @objc.
- Otherwise, use a dummy parameter with a default value, for
example: _ nonobjc: () = (). (19826275)Overrides of methods exposed
to Objective-C in private subclasses are not inferred to be @objc,
causing the Swift compiler to crash. Explicitly add the @objc
attribute to any such overriding methods. (19935352)Symbols from SDKs are not available when using Open Quickly in a
project or workspace that uses Swift. (20349540)
what i did was just adding “private” in front of the override method like this:
private func performOperation(operation: Double -> Double) {
if operandStack.count >= 1 {
displayValue = operation(operandStack.removeLast())
enter()
}
}