我创建了一个名为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时,一切正常,每次都得到相同的实例。
甚至可以让单个类具有多个目标吗?
答案 0 :(得分:1)
不,您的扩展程序和应用之间无法共享单个单例实例。您的WatchKit扩展程序和iOS应用程序在不同的进程中运行。如果要访问扩展程序和应用程序中的数据,可以将数据保存到共享组文件夹。如果您想在扩展程序和应用程序之间进行通信,也可以使用MMWormhole等框架。