34 lines
809 B
Swift
34 lines
809 B
Swift
import Foundation
|
|
|
|
protocol Thingable { // prior to Swift 1.2, needs to be declared @objc
|
|
func thing() -> String
|
|
}
|
|
|
|
class Delegator {
|
|
weak var delegate: AnyObject?
|
|
func operation() -> String {
|
|
if let f = self.delegate?.thing {
|
|
return f()
|
|
} else {
|
|
return "default implementation"
|
|
}
|
|
}
|
|
}
|
|
|
|
class Delegate {
|
|
dynamic func thing() -> String { return "delegate implementation" }
|
|
}
|
|
|
|
// Without a delegate:
|
|
let a = Delegator()
|
|
println(a.operation()) // prints "default implementation"
|
|
|
|
// With a delegate that does not implement thing:
|
|
a.delegate = "A delegate may be any object"
|
|
println(a.operation()) // prints "default implementation"
|
|
|
|
// With a delegate that implements "thing":
|
|
let d = Delegate()
|
|
a.delegate = d
|
|
println(a.operation()) // prints "delegate implementation"
|