我正在尝试将该类声明为公开,如下所示
class RewardsAndRedemptionModel:BaseObject {
var rewardHistory :[RewardHistoryModel]!
}
这是我试图让班级公开的地方,但我不能。
public class RewardHistoryModel :BaseObject {
var rewardValue : String!
var recordedByName : String!
var rewardFor : String!
}
即使我阅读了互联网上提供的文件我也无法理解,请帮助我。
答案 0 :(得分:6)
编译器告诉您不能将其公开,因为超类是内部的。你知道,编译器并不撒谎。
没有子类比其超类更易于访问。为什么?以这种方式思考,子类具有其超类具有的所有属性和成员。如果这个限制不存在,那么访问修饰符将不再有用。你有一个内部课程。其他人将您的内部类子类化并将其声明为公共类。现在封装被打破了。现在可以通过子类访问您不想访问的内容。
换句话说,如果子类比其超类更易于访问,则超类的访问修饰符会失效。这就是为什么编译器有这个限制的原因:提醒你,你所写的内容可以使超级课程成为可能。访问修饰符失效。你可能做错了。
要解决此问题,请将BaseClass
及其超类声明为公开。
答案 1 :(得分:3)
Swift 3
您需要声明RewardHistoryModel
&的访问级别BaseObject
课程&他们的内部成员喜欢函数或变量public
或open
(在swift 3中可以使用)。
public class BaseObject {
// set member of this class as public that you want to access outside (Project/Framework Level)
}
public class RewardHistoryModel :BaseObject {
// set members as public or open - // open is available in swift 3.
public (or open) var rewardValue : String!
public (or open) var recordedByName : String!
public (or open) var rewardFor : String!
}
如文档(The Swift Programming Language - Access Control)中所述:
公共变量不能定义为具有内部或私有 类型,因为类型可能无处可用 使用公共变量。
默认情况下,类被声明为内部,因此您必须添加public关键字以使其公开。
对于函数也存在类似的规则。
函数的访问级别不能高于其参数类型和返回类型,因为该函数可用于其组成类型不可用于周围代码的情况。
答案 2 :(得分:-1)
您还必须将BaseObject
类声明为public
。