如何在Swift中覆盖Objective-C的只读属性?

13

这是objective-c中的定义方式:

@interface AFHTTPRequestOperation : AFURLConnectionOperation

@property (readonly, nonatomic, strong) id responseObject;
如何将某物赋值给此属性?
我想为以后的使用模拟此属性。因此,我需要在Swift中覆盖自己的responseObject。有什么想法如何做到这一点?我可以进行子类化、扩展或任何其他方式。唯一的要求是它必须是AFHTTPRequestOperation类型。
class MyRequestOperation: AFHTTPRequestOperation {

    override var responseObject: [String: AnyObject]
}

出现错误:

使用Objective-C选择器responseObject的getter与具有相同Objective-C选择器的超类AHTTPRequestOperation中的responseObject getter发生冲突


覆盖 let responseObject = …? - The Paramagnetic Croissant
然后尝试去掉初始化部分:链接 - The Paramagnetic Croissant
我的意思是我所写的内容。请阅读我链接的问题。 - The Paramagnetic Croissant
2
由于Swift版本中超类中的属性类型声明为id,因此您应该使用AnyObject而不是任何更严格的类型。 - Vladimir
@The Paramagnetic Croissant - 问题中的示例并不涉及“只读”属性。 - Bartłomiej Semańczyk
显示剩余3条评论
2个回答

19

因此,正如@Atul Mishra所说的那样,答案很简单:

class MyRequestOperation: AFHTTPRequestOperation {

    var myOverridenResponseObject: AnyObject?

    override var responseObject: AnyObject? {

        get {
            return myOverridenResponseObject
        }

        set {
            myOverridenResponseObject = newValue
        }
    }
}

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接