单例框架 sharedInstance 可从 iOS 和 WatchKit Target 访问

iVe*_*tis 5 singleton instance targets ios watchkit

我创建了一个名为 SharedLocation 的 Swift 框架,其中包含一个 Swift 单例类“SharedLocationManager”,如下所示:

public class SharedLocationManager: CLLocationManager, CLLocationManagerDelegate
{
public class var sharedInstance: SharedLocationManager {
    struct Static
    {
        static var onceToken : dispatch_once_t = 0
        static var instance : SharedLocationManager? = nil
    }
    dispatch_once(&Static.onceToken)
    {
            Static.instance = SharedLocationManager()
    }
    return Static.instance!
}

public override init()
{
    //do init stuff

}
Run Code Online (Sandbox Code Playgroud)

此类的共享实例应该可以从我的 iOS 应用程序(用 Objective-C 编写)和我的 WatchKit 扩展(用 Swift 编写)访问。

我在 iOS ViewController 中导入了框架,如下所示:

 @import SharedLocation
Run Code Online (Sandbox Code Playgroud)

在 Watch InterfaceController 中,如下所示:

import SharedLocation
Run Code Online (Sandbox Code Playgroud)

我能够在两个目标中获得单例类的实例,但这些是不同的实例(init() 被调用两次)。当我访问 WatchKit Target 中的 sharedInstance 时,一切正常,并且每次都得到相同的实例。

甚至有可能有一个具有多个目标的单例类吗?

Ste*_*son 2

不,不可能在您的扩展程序和应用程序之间共享单例的单个实例。您的 WatchKit 扩展和 iOS 应用程序在不同的进程中运行。如果您想在扩展程序和应用程序中访问该数据,您可以将数据保存到共享组文件夹。如果您想在扩展程序和应用程序之间进行通信,您还可以使用 MMWormhole 等框架。