使用Xcode6Beta5协议和委托并不像第一个那样工作。在self.delegate时没有调用printCar()?.printCar()它被调用。我现在如何使用protocol&delegate?

import UIKit

protocol communication{
    func printCar()
}

class car{
    var delegate:communication?

    init(){}

    func passCar(){
        self.delegate?.printCar()
    }
}

class ViewController: UIViewController,communication {

    override func viewDidLoad() {
        super.viewDidLoad()
        println("start")
        var bmw = car()
        bmw.passCar()
    }

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

    func printCar(){
        println("car")
    }
}

最佳答案

您没有设置汽车的delegate属性,因此没有要调用的对象。
另外,在Swift中使用类型名称的首字母大写也是一种惯例。(您会注意到,这是一个非常强的约定,甚至连highlighter的语法都希望如此。)
顺便说一句,这与这个问题无关,但您现在可能希望使用Xcode6Beta6。
另一个无关的问题是:您的汽车类的printCar()属性可能应该标记为delegate。否则,如果汽车的代理是拥有汽车的对象,则会出现内存泄漏。

关于ios - Swift中的协议(protocol)声明-Xcode 6 beta 5,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25432683/

10-08 20:57