Swift 语言的委托
Posted
技术标签:
【中文标题】Swift 语言的委托【英文标题】:Delegate in Swift-language 【发布时间】:2014-06-05 11:37:28 【问题描述】:我有两个控制器,我需要调用第一个控制器到第二个控制器的函数: 在第二个控制器中,我在类中创建了协议和初始化委托:
protocol testProtocol
func testDelegate() // this function the first controllers
class SecondViewController: UIViewController
var delegate: testProtocol?
....
@IBAction func testDelegateClicked(sender : AnyObject)
delegate?.testDelegate()
第一个控制器
类 ViewController: UIViewController, testProtocol var secondController: SecondViewController = SecondViewController()
override func viewDidLoad()
super.viewDidLoad()
secondController.delegate = self
func testDelegate()
println("Hello delegate")
</pre>
但是函数没有被调用
【问题讨论】:
secondViewController
的显示效果如何?
在第二个控制器中只有标准函数(ViewDidLoad 和 didReceiveMemoryWarning)和我展示的按钮处理程序
还要确保你获得了对委托的弱引用。默认情况下,swift 中的属性很强大
【参考方案1】:
我将假设您正在使用情节提要。如果我是正确的,那么您的问题是在您的第一个控制器中创建的 secondController
不是您所呈现的实际控制器。您需要在prepareForSegue:
中设置secondController
第二控制器
不变
第一个控制器
class ViewController: UIViewController, testProtocol
// you will want to add the ? since this variable is now optional (i.e. can be nil)
var secondController: SecondViewController? // don't assign it a value yet
// ...
// implementation of the protocol
func testDelegate()
println("Hello delegate")
// your prepare for segue
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?)
// get the controller that storyboard has instantiated and set it's delegate
secondController = segue!.destinationViewController as? SecondViewController
secondController!.delegate = self;
【讨论】:
但我使用 secondController = segue!.destinationViewController 作为 SecondViewController secondController.delegate = self; @Maria,看看我添加的评论。您需要将?
添加到secondController
变量中。如果你这样做,你还需要as?
如果我们不使用情节提要如何实现@Firo
@PREMKUMAR,你只需创建你的新视图控制器 (var controller = SecondController()
),设置它的委托 (controller.delegate = self
),然后最后呈现它 (self.navigationController.pushViewController(controller)
)...如果你还在有问题请告诉我!以上是关于Swift 语言的委托的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift:闭包(回调)与委托,何时使用? [关闭]
如何在 Swift 语言中使用 XMPPStream XMPP 框架发送图像?