Ios 框架中的Swift单例模式

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(),它将不会自动完成,并且该方法不可用。我如何解决这个问题 编辑:请记住,

我在Xcode中有一个工作区,有我的框架和一个测试应用程序,所以在一个工作区中有两个Xcode项目。 在这个框架中,我正在构建一个
单例
类,如下所示:

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
添加到您的单例方法中。我已经更新了我的答案。但是我也可以在没有共享状态的情况下访问它们,对吗?投票人:想解释一下你自己吗?