0

使用Xcode 6 beta 5协议和委托不像第一个那样工作。调用self.delegate?.printCar()不会调用printCar() 。我现在如何使用协议和委托?

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")
    }
}
4

1 回答 1

2

你没有设置汽车的delegate属性,所以没有对象可以调用printCar()

此外,在 Swift 中使用首字母大写作为类型名称的惯例。(你会注意到它是如此强大的约定,甚至 SO 的语法荧光笔也期望它。)

顺便说一句,它与此问题无关,但您现在可能希望使用 Xcode 6 beta 6。

另一个不相关的问题:您的汽车类的delegate属性可能应该标记为weak. 否则,如果汽车的委托是拥有汽车的对象,则会发生内存泄漏。

于 2014-08-21T17:51:24.783 回答