我想覆盖readonly属性并使其可读/写。
超级班。这是一个框架,所以我不能在Swift中重写它。
@interface AWSAbstractCognitoIdentityProvider : AWSAbstractIdentityProvider
@property (nonatomic, strong, readonly) NSString *providerName;
// (...)
@end
当我导入上面的框架时,XCode7的界面预览是这样的:
public class AWSAbstractCognitoIdentityProvider : AWSAbstractIdentityProvider {
public var providerName: String! { get }
// (...)
}
现在,子类定义。这个类是在app中定义的,所以我试图在Swift中重写它。
// .h file
@interface AppIdentityProvider : AWSAbstractCognitoIdentityProvider
@end
// .m file
@interface AppIdentityProvider ()
@property (strong, atomic) NSString *providerName; // <=== THIS: Redeclare by removing readonly
@end
@implementation AppIdentityProvider
@synthesize providerName=_providerName; // <=== and this
// ...
@end
如何对上面的属性进行转码?
我尝试了以下内容:
public class AppIdentityProviderSwift: AWSAbstractCognitoIdentityProvider
{
public override var providerName: String! {
get { return super.providerName }
set { super.providerName = newValue } // <== compile error, the property is read only
}
// (...)
}
感谢。
答案 0 :(得分:2)
您可以在班级中添加支持变量。如果你不需要调用你的超类“setter”,那应该没问题。
class AppIdentityProviderSwift : AWSAbstractCognitoIdentityProvider {
private final var _providerName : String!
override var providerName: String! {
get {
return _providerName
}
set {
_providerName = newValue
}
}
}
答案 1 :(得分:1)
您可以在代码中执行以下操作
private(set) var _providerName: String!
上面的行只会对set应用private,而set将是内部的,这反过来会给你readonly行为。