Swift无法访问定义为id <protocol>

时间:2015-09-15 15:30:50

标签: ios objective-c swift

我有一个ObjC接口,它定义了属性controller,如下所示:

@protocol STXFeedPhotoCellDelegate;
@protocol STXLikesCellDelegate;
@protocol STXCaptionCellDelegate;
@protocol STXCommentCellDelegate;
@protocol STXUserActionDelegate;

@interface STXFeedTableViewDelegate : NSObject <UITableViewDelegate>

@property (nonatomic) BOOL insertingRow;
@property (weak, nonatomic) id <STXFeedPhotoCellDelegate, STXLikesCellDelegate, STXCaptionCellDelegate, STXCommentCellDelegate, STXUserActionDelegate> controller;
@property (nonatomic) NSArray *comments;

- (instancetype)initWithController:(id<STXFeedPhotoCellDelegate, STXLikesCellDelegate, STXCaptionCellDelegate, STXCommentCellDelegate, STXUserActionDelegate>)controller;

- (void)reloadAtIndexPath:(NSIndexPath *)indexPath forTableView:(UITableView *)tableView;
- (CGFloat)calculateHeightForCell:(UITableViewCell *)cell;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

@end

我已将此头文件添加到桥接头。

然后我在Swift中定义了一个子类STXFeedTableViewDelegate。但是,此Swift类无法访问super.controller属性。但是,它可以访问超类STXFeedTableViewDelegate的任何其他属性。我怀疑其背后的原因是因为controller属性被定义为id<Protocol>

我很感激有人可以提供一种方法让Swift从ObjC类中识别这个属性。

更新:使用Swift代码:

class PostTableViewDelegate: STXFeedTableViewDelegate {

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        let controller = self.controller
        let controller2 = super.controller
        //more class code below

let controller = self.controllerPostTableViewDelegate does not have a member called controller

而失败

let controller2 = super.controllerSTXFeedTableViewDelegate does not have a member called controller

而失败

0 个答案:

没有答案