可从iOS和WatchKit Target访问的Singleton框架sharedInstance

时间:2015-03-24 11:21:07

标签: ios singleton instance watchkit targets

我创建了一个名为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

}

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

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

 @import SharedLocation

并在Watch InterfaceController中如此:

import SharedLocation

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

甚至可以让单个类具有多个目标吗?

1 个答案:

答案 0 :(得分:1)

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