委托模式没有故事板或segue

时间:2017-06-22 13:06:45

标签: swift delegates viewcontroller

我正在学习如何深入了解委托模式。 iOS中的许多代码示例使用两个ViewControllers,其中涉及prepare(for segue:...)

我希望我的程序只使用一个ViewController代理协议但没有segue或storyboard。 ViewController有一个按钮来执行一个简单的委托方法,比如添加一个数字。

ViewController班级:

class ViewController: UIViewController, theDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
}

// It is here I got stuck
// How do I set delegate = self without out involving segue or the     storyboard at all? Do I need to instantizate the dedecated delegate class and how?
// To conform to delegate -- theDelegate
func add(num: Int) {
    // Output result on ViewController
}

func minus(num: Int) {
    // Output result on ViewController
}
}

专用Delegate班级:

protocol theDelegate: class {
func add(num: Int)
func minus(num: Int)
}

class ClassDelegate: NSObject {
weak var delegate: theDelegate?

func x() {
    delegate?.add(num: 100)
}
}

2 个答案:

答案 0 :(得分:3)

如果您的视图控制器是委托,那么您的类命名会令人困惑。你所谓的ClassDelegate并不是任何一种代表,而是一个"工人" 使用委托。然而....

var worker = ClassDelegate()
override func viewDidLoad() {
    super.viewDidLoad()
    worker.delegate = self
    worker.x()
}

答案 1 :(得分:1)

@PhillipMills的答案应该是正确的,只需添加一些关于thisthis命名约定的注释,以便您获得更好的代码质量。

  
      
  • 您应该使用大写字母表示类型(和协议),小写字母用于其他所有内容
  •   
  • 除非您需要来自ObjC世界的东西,无论是使用ObjC还是使用KVO
  • ,都不需要继承NSObject