Ryu*_*lio 5 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
}
Run Code Online (Sandbox Code Playgroud)
线路:
WKExtension.shared().delegate = self
Run Code Online (Sandbox Code Playgroud)
被标记为红色并显示错误为:
无法分配给属性:“delegate”是一个只能获取的属性
小智 9
关于如何使用现代 SwiftUI 应用程序执行此操作的文档并不多,Info.plist 方法似乎不再适用。也许这会帮助其他人更快地解决这个问题:使用WKExtensionDelegateAdaptor,类似于UIApplicationDelegateAdaptor.
@main
struct WatchApp: App {
@WKExtensionDelegateAdaptor(ExtensionDelegate.self) var extensionDelegate
@SceneBuilder var body: some Scene {
...
}
Run Code Online (Sandbox Code Playgroud)
代理由系统自动分配,如此处所述。
通过执行以下操作来设置委托对象:
WKExtensionDelegate。WKExtensionDelegateClassNamein值为(对于 Swift 项目,模块名称是必需的。)Info.plist$(PRODUCT_MODULE_NAME).Your_Class_ExtensionDelegate| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |