nawar
05/22/2017, 2:47 PMSender
class all the way to all the classes that implements Clickable
interface Clickable {
fun click(message: String)
}
class Sender {
init {
Clickable.click("sending from 'Sender'") // is this possible?
}
}
class Button : Clickable {
override fun click(message: String) = println("button $message") // receiving the message here
}
voddan
05/22/2017, 2:48 PMinterface Clickable
with object Clickable
and it worksdiesieben07
05/22/2017, 2:49 PMnawar
05/22/2017, 3:06 PMSender
all the way to all the classes that implements Clickable
diesieben07
05/22/2017, 3:22 PMclick
is an instance method on Clickable
, so you need an actual instance of a class that implements Clickable
so that you can call it.uli
05/22/2017, 4:19 PMuli
05/22/2017, 4:20 PMdiesieben07
05/22/2017, 5:16 PMnawar
05/22/2017, 5:41 PMuli
05/22/2017, 5:47 PMuli
05/22/2017, 5:47 PMuli
05/22/2017, 5:48 PMnawar
05/22/2017, 5:52 PMuli
05/22/2017, 5:53 PMuli
05/22/2017, 5:55 PMfun click
is an instance method though, meaning it can only be called on an object of type Button. I.e. something like (in Java) new Button()
nawar
05/22/2017, 6:02 PMprotocol /* interface */ Clickable {
func click(message: String)
}
class Sender {
var delegate: Clickable?
init() {
delegate?.click("sending from 'Sender'") //send from here to everyone implementing the protocol (interface)
}
}
class Button : Clickable {
override func click(message: String) {
print("button $message") // receiving the message here
}
}
uli
05/22/2017, 6:04 PMvar delegate
. With the delegate your are already moving into the right direction.uli
05/22/2017, 6:04 PMuli
05/22/2017, 6:05 PMall
uli
05/22/2017, 6:07 PMuli
05/22/2017, 6:09 PMinterface Clickable {
fun click(message: String)
}
class Sender(listener: Clickable) {
init {
listener.click("sending from 'Sender'") // is this possible?
}
}
class Button : Clickable {
override fun click(message: String) = println("button $message") // receiving the message here
}
fun main(args: Array<String>) {
var clickable = Button()
Sender(clickable)
}
nawar
05/22/2017, 6:20 PMuli
05/22/2017, 6:21 PMuli
05/22/2017, 6:23 PMnawar
05/22/2017, 6:23 PMnawar
05/22/2017, 6:24 PMuli
05/22/2017, 6:25 PMthe standard solution with Swift
nawar
05/22/2017, 6:26 PMuli
05/22/2017, 6:26 PMvoddan
05/22/2017, 6:30 PMnawar
05/22/2017, 6:39 PMprotocol /* interface */ Clickable {
func click(message: String)
}
class Sender {
var delegate: Clickable?
init() {
delegate?.click("sending from 'Sender'") //send from here to everyone implementing the protocol (interface)
}
}
class Button : Clickable {
val sender = Sender()
init {
sender.delegate = self // set the delegate here so we'd receive the result form the calls.
}
override func click(message: String) {
print("button $message") // receiving the message here
}
}
I haven’t tested it out though; however, this is how delegation is used.uli
05/22/2017, 6:46 PMuli
05/22/2017, 6:46 PMinterface Clickable {
fun click(message: String)
}
class Sender(listener: Clickable) {
init {
listener.click("sending from 'Sender'") // is this possible?
}
}
class Button : Clickable {
val sender: Sender
init {
sender = Sender(this)
}
override fun click(message: String) = println("button $message") // receiving the message here
}
fun main(args: Array<String>) {
Button()
}
nawar
05/22/2017, 6:53 PMuli
05/22/2017, 6:54 PMuli
05/22/2017, 6:54 PMnawar
05/22/2017, 6:58 PMnawar
05/22/2017, 7:19 PMprotocol /* interface */ Clickable {
func click(message: String)
}
class Sender {
var delegate: Clickable?
func displayMessage() {
delegate?.click(message : "sending from 'Sender'") //send from here to everyone implementing the protocol (interface)
}
}
class Button : Clickable {
init() {
let sender = Sender()
sender.delegate = self // delegate gets initalized in here
sender.displayMessage()
}
func click(message: String) {
print("button => \(message)") // receiving the message here
}
}
let button = Button()
uli
05/22/2017, 7:24 PMinterface Clickable {
fun click(message: String)
}
class Sender() {
public var listener: Clickable? = null
fun displayMessage() {
listener?.click(message = "sending from 'Sender'")
}
}
class Button : Clickable {
init {
var sender = Sender()
sender.listener = this
sender.displayMessage()
}
override fun click(message: String) = println("button => $message")
}
fun main(args: Array<String>) {
Button()
}
uli
05/22/2017, 7:24 PMuli
05/22/2017, 7:25 PMsend from here to everyone implementing the protocol
uli
05/22/2017, 7:26 PMuli
05/22/2017, 7:26 PMnawar
05/22/2017, 7:32 PMnawar
05/22/2017, 7:55 PMuli
05/22/2017, 7:56 PM