Swift 3 未调用委托函数

Swift 3 Delegate function not called

我正在努力了解 Swift 代表和 stole/knocked-up 游乐场,但似乎无法调用委托函数。

protocol fBookDelegate:class {
    func processData(data: String)
}

class fBook {

weak var delegate: fBookDelegate?

init() {
    print("initialising fBook")
    delegate?.processData(data: "hello world")
    print("we should have printed")
    }
}

class fMain: fBookDelegate {
init() {
    print("initialising fMain")
    let getfBook = fBook()
    getfBook.delegate = self
    print("all done let's rumble")
    }

func processData(data: String) {
    print("processing data from fBook with \(data)")
    }
}

var controller = fMain()

有人能发现我的错误吗?

我得到的输出是

initialising fMain
initialising fBook
we should have printed
all done let's rumble

这是使用委托的一种选择:

protocol fBookDelegate:class {
    func processData(data: String)
}

class fBook {

    weak var delegate: fBookDelegate?

    init() {
        print("initialising fBook")
    }

    func talkToMe() {
        delegate?.processData(data: "hello world")
    }
}

class fMain: fBookDelegate {
    init() {
        print("initialising fMain")
        let getfBook = fBook()
        getfBook.delegate = self
        getfBook.talkToMe()
        print("all done let's rumble")
    }

    func processData(data: String) {
        print("processing data from fBook with \(data)")
    }
}

var controller = fMain()

另一个是将委托作为参数的自定义初始化方法。

你可以这样使用:

import UIKit
protocol fBookDelegate:class {
    func processData(data: String)
}
class fBook {
    init(delegate: fBookDelegate?) {
        print("initialising fBook")
        delegate?.processData(data: "hello world")
        print("we should have printed")
    }
}
class fMain: fBookDelegate {
    init() {
        print("initialising fMain")
        let getfBook = fBook(delegate: self)
        print("all done let's rumble")
    }
    func processData(data: String) {
        print("processing data from fBook with \(data)")
    }
}

var controller = fMain()

输出:

initialising fMain
initialising fBook
processing data from fBook with hello world
we should have printed
all done let's rumble