Ios 框架中的Swift单例模式
我在Xcode中有一个工作区,有我的框架和一个测试应用程序,所以在一个工作区中有两个Xcode项目。 在这个框架中,我正在构建一个Ios 框架中的Swift单例模式,ios,singleton,swift2,swift2.1,Ios,Singleton,Swift2,Swift2.1,我在Xcode中有一个工作区,有我的框架和一个测试应用程序,所以在一个工作区中有两个Xcode项目。 在这个框架中,我正在构建一个单例类,如下所示: public let sharedInstance = MKUserPreferences() class func A() {} class func B() {} 但是,当我在应用程序项目中尝试调用MKUserPreferences.sharedInstance.A(),它将不会自动完成,并且该方法不可用。我如何解决这个问题 编辑:请记住,
单例
类,如下所示:
public let sharedInstance = MKUserPreferences()
class func A() {}
class func B() {}
但是,当我在应用程序项目中尝试调用MKUserPreferences.sharedInstance.A()
,它将不会自动完成,并且该方法不可用。我如何解决这个问题
编辑:请记住,
MKUserPreferences
是一个动态链接的框架,我想在我的应用程序(其他项目)中使用它。在swift中,您可以像这样构建一个单线单例类:
static let sharedInstance = MKUserPreferences()
private override init() {
super.init()
}
func otherFunc(){}
MKUserPreferences.sharedInstance.otherFunc()
您可以这样使用:
static let sharedInstance = MKUserPreferences()
private override init() {
super.init()
}
func otherFunc(){}
MKUserPreferences.sharedInstance.otherFunc()
希望这能对您有所帮助。
A
和B
被定义为class
方法。因此,可以从类MKUserPreferences.A()
访问它们,但不能从实例访问它们
如果希望它们成为实例方法,只需从其定义中删除class
:
public class MKUserPreferences {
public static let sharedInstance = MKUserPreferences()
private init() {} // Prevents using the default '()' initializer
public func A() {}
public func B() {}
}
此外,还需要显式定义要公开的方法。在:
公共类型默认为具有内部成员,而不是公共成员。如果希望类型成员为公共成员,则必须显式将其标记为公共成员。此要求确保类型的面向公共的API是您选择发布的,并避免错误地将类型的内部工作呈现为公共API
对不起,这对我没有帮助。它会出错,类型为MKUserPreferences的值没有成员otherFunc。据您所知:在框架项目中,我有MKUserPreferences,在应用程序项目中,我想使用它。因此我将sharedInstance公开。它们不能像
MKUserPreferences.A()
那样被访问,因为它们在框架项目中(它们必须是公开的)。所以在框架项目中,我有一个MKUserPreferences
,它必须是公共的(动态链接的框架),但是我想要一个sharedInstance来访问内部方法。如果你上传一个暴露问题的示例项目,我们可以下载并检查它。我已经将框架和应用程序放在一起了。谢谢!您只需要将public
添加到您的单例方法中。我已经更新了我的答案。但是我也可以在没有共享状态的情况下访问它们,对吗?投票人:想解释一下你自己吗?