首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速组合:无法从KeyPath Swift.KeyPath中提取字符串

快速组合:无法从KeyPath Swift.KeyPath中提取字符串
EN

Stack Overflow用户
提问于 2021-10-19 22:56:56
回答 1查看 1.9K关注 0票数 2

我试图观察核心数据实例中对象中的任何更改。这是我的代码:

代码语言:javascript
复制
class MyClass {
    @objc dynamic var str: String?
}

final class Article: NSObject {
    @objc dynamic var title: String?
    @objc dynamic var summary: String?
    var myVar: MyClass?
}

下面是我正在执行的观察员:

代码语言:javascript
复制
func update(article: Article) {
    titleSubscription = article.publisher(for: \.title).sink { value in
        print(value)
    } receiveValue: { _ in
        print("I got something")
    }
    summarySubscription = article.publisher(for: \.myVar?.str).sink{ _ in
        
    } receiveValue: { _ in
        
    }
}

但我发现了一个错误:

代码语言:javascript
复制
Thread 1: Fatal error: Could not extract a String from KeyPath Swift.KeyPath<Examples.Article, Swift.Optional<Swift.String>>

你们中有谁知道我为什么会犯这个错误,或者有没有工作要做?

我非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 05:02:23

您正在尝试创建一个使用键值观察的发布服务器。键值观察是Objective运行时的一个特性.通过在titledynamic上放置@objcdynamic,您已经将属性@objcdynamic公开到了Objective运行时。然而,myVar是一个普通的实例变量,而不是一个可观察的属性。所以键值编码系统找不到它,在运行时你会得到一个错误。

文件载于

https://developer.apple.com/documentation/swift/cocoa_design_patterns/using_key-value_observing_in_swift/

他说

为键值观察注释一个属性。

使用@objc属性和动态修饰符通过键值观察来标记要观察的属性。

此外,要参与键值编码,MyClass还必须可供目标C使用,并且必须具有您希望从密钥-键值观察中访问的属性:

代码语言:javascript
复制
class MyClass : NSObject {
    @objc dynamic var str: String?
}

final class Article: NSObject {
    @objc dynamic var title: String?
    @objc dynamic var summary: String?
    @objc dynamic var myVar: MyClass?
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69638458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档