2017-06-22 52 views
2

我正在学习对委托模式的深入了解。 iOS中的很多代码示例使用了两个ViewControllers,其中涉及prepare(for segue:...)没有故事板或segue的委托模式

我希望我的程序只使用一个ViewController与代表协议,但没有segue或故事板。 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) 
} 
} 

回答

1

从@PhillipMills答案应该是正确的,只是从thisthis添加有关命名约定的一些注意事项,为您获得更好的代码质量。

  • 您应该使用类型(和协议),小写字母大写字母一切
  • 没有必要,除非你想从ObjC世界的东西,无论是ObjC工作或使用志愿
  • 从NSObject的继承
+0

谢谢大家的回复。 @PhillipMills我不是很确定你的意思,你是说我没有正确使用委托模式? – Tony

3

如果您的视图控制器是委托,那么你的类命名是混乱的。你所说的ClassDelegate不会是任何类型的代表,而是使用代表的“工人”。但是....

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

哦,我明白了。我想我反过来了。所以该类采用的协议是真正的委托类,而我所谓的ClassDelegate只是协议,可能应该重命名为ClassProtocol是否正确?对不起,英语不是我的第一个语言。 – Tony

+0

'ClassDelegate'只与协议有关,因为它使用它。真的,它没有理由被称为“委托”或“协议”。考虑一个表格视图;它使用委托,但我们没有以与委托协议相关的任何方式命名它。 –

+0

我明白了。非常感谢帮助我解决这个问题。 :) – Tony