2016-07-18 2 views
0

Я пытаюсь сделать протокол в UITableViewCell классе, но когда я заявляю о своем делегатом, я получаю сообщение об ошибке в обоих required init?(coder aDecoder: NSCoder) и override init(style: UITableViewCellStyle, reuseIdentifier: String?)свойство «self.delegate» не инициализируется при super.init

Ошибка: - Property 'self.delegate' not initialised at super.init

Это мой подкласс: -

import UIKit 

protocol tableCellBtnActionDelegate{ 

func removeRowAtIndex(_: Int) 

} 

class FriendsListTableViewCell: UITableViewCell { 
@IBOutlet weak var friendListAddBtn: UIButton! 
var usersId : String! 
var buttonText : String! 
var indexPath : Int! 
let delegate : tableCellBtnActionDelegate! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    friendListAddBtn.layer.cornerRadius = 4 
    friendListAddBtn.layer.backgroundColor = UIColor(red: 121.0/255.0, green: 220.0/255.0, blue: 1, alpha: 1).CGColor 
} 

required init?(coder aDecoder: NSCoder) { 

    super.init(coder: aDecoder) 
} 
override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

} 
override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 

    super.init(style: style, reuseIdentifier: reuseIdentifier) 

} 
} 

Errors

ответ

0

Изменение

let delegate : tableCellBtnActionDelegate! 

в

var delegate : tableCellBtnActionDelegate! 

или вы не можете установить значение делегировать свойству когда-либо

+0

* Вы можете * установить значение в 'let' + неявно развернутый опционально : в init. ОП просто этого не делает. – Moritz

+0

@EricD ty для комментариев, это делает ответ более полным; Я просто не верю, что он хочет установить делегата в init –

+0

Обновите свой ответ, чтобы предотвратить отрицательные голоса! –

2

Ну вы не инициализировать его, поэтому компилятор выдаст предупреждение. Я бы посоветовал вам изменить делегат, чтобы он был дополнительным, и установите делегат, когда вам это нужно.

var delegate : tableCellBtnActionDelegate? 

Вы также должны обработать случай, когда делегат не установлен (ноль).

+0

Я сделал это, не помог. Функция делегата не вызывается, когда я ее сменил на «var delegate: tableCellBtnActionDelegate!», Это дало мне ошибку: «nil». – Dravidian

+1

Это правильный ответ, чтобы исправить проблему в вашем вопросе. Вам нужно убедиться, что вы правильно настроили делегат и вызвали метод делегата. Вы не указали ни один из этих битов кода – Paulw11

1

У вас есть предупреждение, потому что вы не инициализируете недвижимость delegate. Это должно быть слабое свойство, или вы сохраните ссылку на объект делегата, which you usually don't want to do. Так что лучший подход был бы:

weak var delegate : tableCellBtnActionDelegate?

И тогда вы должны использовать его как это:

self.delegate?.notifyAboutSomething()

Смежные вопросы