WKExtension.shared()。delegate = self现在显示无法分配给属性:“ delegate”是仅获取属性

时间:2019-06-10 16:35:35

标签: swift watchkit xcode11

过去用于后台任务的WatchOS代码要求将WKExtention.shared().delegate设置为self,但是现在显示错误消息:

  

无法分配给属性:“ delegate”是仅获取属性

如果我删除该行,则触发后台任务时不会得到更新,因为我以前可以接收。

我查看了StackOverflow以及Google和Apple文档,但找不到答案。为什么该行过去可以正常工作时现在显示错误。

制作一个新的WatchKit应用并在InterfaceControllerVC.swift上 将WKExtensionDelegate添加到该类中,然后:

    override func awake(withContext context: Any?) {
      super.awake(withContext: context)

      WKExtension.shared().delegate = self
   }

该行:

    WKExtension.shared().delegate = self

标记为红色,并显示以下错误:

  

无法分配给属性:“ delegate”是仅获取属性

2 个答案:

答案 0 :(得分:2)

关于如何使用现代SwiftUI应用程序执行此操作的文档不多,Info.plist方法似乎不再起作用。也许这会帮助其他人更快地解决此问题:使用WKExtensionDelegateAdaptor,类似于UIApplicationDelegateAdaptor

@main
struct WatchApp: App  {

@WKExtensionDelegateAdaptor(ExtensionDelegate.self) var extensionDelegate

@SceneBuilder var body: some Scene {
       
...

}

答案 1 :(得分:1)

如此处所述,代表由系统自动分配。

Apple Doc WKExtensionDelegate

通过执行以下操作来设置委托对象:

  1. 创建一个名称为 Your_Class_ExtensionDelegate 的类,并实现协议WKExtensionDelegate
  2. 确保WatchKit Extension中WKExtensionDelegateClassNameInfo.plist的值为$(PRODUCT_MODULE_NAME).Your_Class_ExtensionDelegate(模块名称对于Swift项目是必需的。)