问题标签 [swift-keypath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - 通用 NSKeyValueObservedChange/Keypath
我有一个数组NSKeyValueObservation
。我正在查看 a 上的一些属性,NSManagedObject
并且我想在属性更改时执行所有相同的方法。这是代码:
我正在尝试像这样应用它:
但比我得到的错误:
在没有更多上下文的情况下,表达式的类型是模棱两可的
我不关心 KeyPath,我只想刷新另一个视图。这些属性都是不同的类型。
swift - 如何更新此类以支持将键路径值绑定到函数?
我有一个类允许我将属性声明为Bindable
这样做允许将更改直接绑定到 UI 元素。
这是基于在此处找到的一篇文章
我想做的也是能够将属性绑定到函数。
绑定值的当前语法类似于 -
user.bind(\.name, to: label, \.text)
但我想扩展它,以便该键路径上的属性可以调用一个方法。
有点像 -
在这种情况下doSomething
,可以调用一个助手NSAttributedString
并接受该name
道具作为要在该助手中使用的参数。
我在RxSwift
使用bind(onNext: ....)
.
我尝试使用 -
位我收到以下错误-
函数签名中未使用通用参数“O”
无法推断通用参数“O”
swift - Swift:为什么我们需要 keypath
我知道如何使用 keypath,但我对为什么要使用它感到困惑?
例如,假设我们有 A 类和 B 类,A 类有 B 类的对象
我可以使用密钥路径 Ex 访问 B 类中的 myName:
但是,我可以用这种方式做同样的事情
那么为什么我们需要密钥路径!
swift - 测试 KeyPath 指向的类型是否为 Set
给定 a KeyPath<Root, Value>
,是否有一种干净的方法来测试是否Value.self
是 a Set
?对于 Core Data,我想指定一个接受 的 API KeyPath<Root, Value>
,并且可以使用它来确定它是否是toMany
关系。到目前为止,我最好的尝试是指定一个协议:
然后,让所有KeyPath
s 符合它:
然后有条件地返回true
有效的两种情况:NSOrderedSet
和Set
。
但是编译器抱怨我没有指定Set
这里的泛型类型。如果我将它切换到Collection
,编译器会很高兴,但这不起作用,因为它返回true
when Value
is aString
在这种情况下是非常错误的。
swift - 在 Swift 中动态分配结构的属性
我有这个结构:
我希望每个属性的值成为属性本身的字符串。像这样:
但无论属性的数量或其价值如何,我都想完成:
我试过这个:
但我知道这不是 KeyPath 的工作方式......可能也存在类型安全问题。任何想法?
swift - Swift ReferenceWritableKeyPath 如何与 Optional 属性一起使用?
存在的基础:在阅读之前,了解您不能通过image
keypath 将 UIImage 分配给图像视图插座的属性会有所帮助\UIImageView.image
。这是财产:
现在,这会编译吗?
不!
可选类型“UIImage?”的值 必须解包为“UIImage”类型的值
好的,现在我们已经为实际用例做好了准备。
我实际上想了解的是 Combine 框架.assign
订阅者如何在幕后工作。为了进行实验,我尝试使用自己的 Assign 对象。在我的示例中,我的发布者管道生成一个 UIImage 对象,并将其分配给image
UIImageView property 的属性self.iv
。
如果我们使用该.assign
方法,它将编译并工作:
所以,我对自己说,要看看它是如何工作的,我将删除.assign
并用我自己的 Assign 对象替换它:
哗啦啦!我们不能这样做,因为UIImageView.image
它是一个可选的 UIImage,而我的发布者生成了一个简单明了的 UIImage。
我试图通过在键路径中展开 Optional 来解决这个问题:
酷,编译。但它在运行时崩溃,大概是因为图像视图的图像最初是nil
.
现在我可以通过map
在我的管道中添加一个将 UIImage 包装在 Optional 中的管道来解决所有这些问题,以便所有类型都正确匹配。但我的问题是,这到底是如何工作的?我的意思是,为什么我不必在我使用的第一个代码中这样做.assign
?为什么我可以在.image
那里指定密钥路径?关于关键路径如何与可选属性一起工作似乎有些技巧,但我不知道它是什么。
在 Martin RI 的一些输入之后意识到,如果我们pub
显式键入作为生成,我们将获得与添加将 UIImage 包装在 Optional 中的UIImage?
效果相同的效果。map
所以这编译和工作
这仍然不能解释原件是如何.assign
工作的。似乎它能够将类型的可选性通过管道推送到运算符中。但我不明白这怎么可能。.receive
swift - 更多关于带有 Optional 属性的 ReferenceWritableKeyPath 的奇怪行为
(我在标题中说“更多”,因为这个问题是我的How does Swift ReferenceWritableKeyPath work with an Optional property? 的附录?。)
在我的代码中,self.iv
是一个插座属性:
现在,这会编译吗?
不!我们被告知这里的某些东西必须打开,尽管它是什么并不完全清楚:
可选类型“UIImage?”的值 必须解包为“UIImage”类型的值
但现在看这个。我将只制作一个图像视图,而不是一个插座:
编译!为什么?UIImageView 属性和 UIImageView 本地之间有什么语义/句法区别?是否该属性是隐式展开的 Optional?
为了测试这个想法,让我们通过本地“传播”self.iv
显式展开:
那也编译!但是我们必须使用单独的本地;仅仅self.iv
直接展开是不够的:
我根本不明白这一点。它违背了我关于隐式展开的 Optional 是什么以及如何始终将非 Optional 分配给包装相同类型的 Optional 的标准信念。关于 ReferenceWritableKeyPath 的一些东西似乎与 Optional 属性一起工作很奇怪,但我不能把手指放在它上面。
所以我的问题是(抱歉,可能有点含糊):有人可以证明所有这些结果的合理性,并使它们看起来合理且可预测吗?这里有什么规则?
ios - Fatal error: could not demangle keypath type
I have a simple class and I want to use keypath in the init
, something like this:
When I run this code I get a runtime error:
Fatal error: could not demangle keypath type from ' ����XD':
But, if I specify the type in keyPath it works fine:
But, what's even stranger is that this code works:
What is the actual reason for this error?
swift - 键路径值类型“Data.Element.ID”无法转换为上下文类型“ID”
Key path value type 'Data.Element.ID' cannot be converted to contextual type 'ID'
当传递的数据包含已经从 Identifiable 继承的元素时,尝试在下面的扩展中创建初始化程序时出现错误。