Skip to content

Instantly share code, notes, and snippets.

@swizzlr
Created January 30, 2015 15:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swizzlr/3355037f53b40d444394 to your computer and use it in GitHub Desktop.
Save swizzlr/3355037f53b40d444394 to your computer and use it in GitHub Desktop.
Statically typed alternatives to delegates, using the full power of Swift
struct Touch { }
struct Image { }
public final class Button {
public enum State { case Enabled, Disabled, Pressed }
public struct DynamicButtonConfiguration {
let buttonWasPressed: (button: Button, touch: Touch) -> ()
let imageForButtonState: (buttonState: State) -> (Image)
}
let configuration: DynamicButtonConfiguration
private var currentImage: Image // TODO: add property observers to redraw
required public init(configuration: DynamicButtonConfiguration) {
self.configuration = configuration
self.currentImage = configuration.imageForButtonState(buttonState: .Enabled)
}
private func hitTest(touch: Touch) -> () {
// TODO: hit testing
if true {
configuration.buttonWasPressed(button: self, touch: touch)
currentImage = configuration.imageForButtonState(buttonState: .Pressed)
}
}
}
let buttonConfiguration = Button.DynamicButtonConfiguration(
buttonWasPressed: { (button, touch) -> () in
return
},
imageForButtonState: { (state) -> (Image) in
return Image()
}
)
let myButton = Button(configuration: buttonConfiguration)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment