我正在尝试在UITableViewCell
课程中制作协议,但当我声明我的代理人时,我在required init?(coder aDecoder: NSCoder)
和override init(style: UITableViewCellStyle, reuseIdentifier: String?)
错误: - 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)
}
}
答案 0 :(得分:2)
嗯,你没有初始化它,所以编译器会给你一个警告。 我建议你修改委托是可选的,并在需要时设置你的委托。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
char my_getc()
{
unsigned char ch[1];
read(1, ch, 1);
return ch[0];
}
char *my_readline()
{
char line[4096];
char *ret;
char c;
int position = 0;
while(c = my_getc() != '\n')
line[position++] += c;
line[position] = '\0';
ret = malloc(sizeof(char) * strlen(line));
return ret;
}
int main(int argc, char *argv[])
{
char c;
printf("%s\n", my_readline());
}
您还应该处理未设置委托(nil)的情况。
答案 1 :(得分:1)
更改
let delegate : tableCellBtnActionDelegate!
到
var delegate : tableCellBtnActionDelegate!
或者你不能设置值来委托属性
答案 2 :(得分:1)
您收到警告是因为您没有初始化delegate
属性。它实际上应该是一个弱属性,或者您将保留对委托对象which you usually don't want to do的引用。所以最好的方法是:
weak var delegate : tableCellBtnActionDelegate?
然后你必须像这样使用它:
self.delegate?.notifyAboutSomething()