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 上委托 Objective-C 协议

如何在 Swift 语言中使用 XMPPStream XMPP 框架发送图像?

2.C#1语言核心基础

C#语言中泛型和委托的关系是啥,Func<int>是泛型还是委托?

C#语言不需要委托的概念吗? [关闭]