Protocol/delegates in Swift 3.0

I declare this day a fine day having discovered non-Objective-C protocols! No more @objc protocol usage. Now it’s as simple as something like this:

protocol myDelegate {
    func report(info:String)

class MyClass: NSObject {
    var delegate:myDelegate?
    var serviceType = "hephaestus"

    init(withServiceType: String){
        self.serviceType = withServiceType
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {

    convenience override init() {
        self.init(withServiceType: "hephaestus")

And then in implementation

import UIKit

class ViewController: UIViewController, myDelegate {
    // Delegate method
    func report(info: String) {
        print("delegate: \(info)")
    override func viewDidLoad() {
        let mc = MyClass()
        mc.delegate = self
        // Do any additional setup after loading the view, typically from a nib.

    override func didReceiveMemoryWarning() {
        // Dispose of any resources that can be recreated.

This is a really simple example, but it works and seems cleaner to me in Swift.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.