物业' self.delegate'没有在super.init初始化

时间:2016-07-18 12:42:14

标签: ios swift uitableview swift-protocols

我正在尝试在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)

}
}

Errors

3 个答案:

答案 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()