Объявление протокола в Swift - Xcode 6 beta 5

С протоколом Xcode 6 beta 5 и делегат не работает как первый. printCar () не вызывается, когда self.delegate?.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")
    }
}

1 ответ

Решение

Вы не устанавливаете машину delegate свойство, поэтому нет объекта для вызова printCar() на.

Кроме того, в Swift принято использовать начальные заглавные буквы для имен типов. (Вы заметите, что это настолько строгое соглашение, что даже синтаксическая подсветка SO ожидает этого.)

Кстати, это не имеет никакого отношения к этой проблеме, но вы, возможно, захотите быть на Xcode 6 beta 6 уже сейчас.

Еще одна не связанная с этим проблема: класс вашего автомобиля delegate свойство должно быть помечено как weak, В противном случае, если делегатом машины является объект, которому принадлежит машина, вы получите утечку памяти.

Другие вопросы по тегам