快速无法在扩展对象内部覆盖

时间:2019-01-09 09:31:57

标签: swift swift4.2

我们正在尝试将基于基础的Swift版本最近升级到4.2。不幸的是,在升级时发现了很多问题。我们无法解决当前问题的其中之一是:

在以下代码中得到该错误:

  

不支持从扩展名覆盖非@objc声明

class MyHelpTableViewCell: WMHelpTableViewCell {
}

extension MyHelpTableViewCell {
    @objc class dynamic var nib: UINib {
        return UINib(nibName: "MyHelpTableViewCell", bundle: nil)
    }

如果您有经验,请帮助我解决该问题。非常感谢。

更新: 如果我像这样添加了@objc和dynamic,

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8081;

app.use(bodyParser.json());

// Allow callers to send an email message
app.post('/send_email', function(req, res){
    console.log('send_email body: ',  req.body);
    sendEmail(req.body);
    res.status(201).json({status: 'success' });
});

app.listen(port);

function sendEmail(emailObj) {
    // Send the mail
}

以下错误相同,

  

不支持从扩展名覆盖非@objc声明

2 个答案:

答案 0 :(得分:1)

错误很明显:

您必须将覆盖方法从extension移到class


或者您必须用@objc@dynamic标记基类中的声明

class BaseTableViewCell : UITableViewCell {
    @objc class dynamic var identifier : String { return "something" }
}

答案 1 :(得分:1)

您无需扩展即可实现以下目标:

class WMHelpTableViewCell {
    var identifier: String!
}

class MyHelpTableViewCell : WMHelpTableViewCell {
    override var identifier: String? {
        get {
            return self.identifier
        }
        set {
            self.identifier = newValue
        }
    }
}