Объявление протокола в 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
, В противном случае, если делегатом машины является объект, которому принадлежит машина, вы получите утечку памяти.