问题标签 [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 - switch语句中的速记键路径?
我有一个方法,它为一个类型提供一个关键路径,但是当我尝试使用关键路径的简写版本时,它给了我一个编译错误。
这是我正在尝试做的事情:
在switch
语句中,是否可以做case \.prop1
而不是指定根?当我尝试这个时,我得到这个错误:
default
即使我已经指定了该类型的所有属性,它也迫使我指定一个案例。这也有原因吗?谢谢你的帮助。
core-data - 如何在 Swift 中将 NSPredicate 与计算属性一起使用?
我正在尝试使用 NSPredicate 在 SwiftUI 中创建 @FetchRequest,如下所示:
不幸的是,我的isRunning
属性是一个计算属性,如下所示:
问题是 NSPredicate 会崩溃,因为它在解析谓词时找不到计算属性的字符串。有没有办法让这成为可能?我很想使用它,因为它可以让我创建一个不错的用户体验。
注意:我无法测试 activeStep 作为替代方案,因为它也是一个计算属性,具有更复杂的逻辑。
swift - 使用协议定义具有不同值的 KeyPath 集合
假设您想要跟踪一个或多个唯一标识符。在这种情况下,A
有两个属性被认为是唯一的A
,而B
只有一个属性是唯一的B
。
如果只有一个唯一键,我们可以这样做:
...但这将我限制在一把钥匙上。
swift - 以最简单的形式在 map() 中应用 KeyPath
错误:
在没有更多上下文的情况下,表达式的类型是模棱两可的
为什么它不起作用?似乎应该如此。
如果不是这样,我们还能如何摆脱这里丑陋的 { $0 } 呢?
也许compactMap的例子会更香))
错误:
无法将 'WritableKeyPath<_, _>' 类型的值转换为预期的参数类型 '(Int?) throws -> ElementOfResult?'
swift - 在 Swift 中获取密钥路径的编码密钥
我所拥有的:具有不同属性的可编码结构。
我想要的:一个函数,当它以 Json 编码时,我可以在其中获取属性的确切名称。我认为最有前途的方法是使用 Keypath,但我不知道如何以及是否可能。谢谢!
swift - 符合协议时类型别名声明的冗余重复
这是一个非常有用的协议,可以帮助我们在创建自定义集合时减少样板代码。
假设我们的结构包装了一个字典。我们希望它像那本字典一样成为一个集合。
我们应该为字典属性提供 keyPath 并应用于协议。它有效!
用法示例和我的问题:
它完美地工作。但是我们为什么要重新声明元素和索引类型别名!?在这篇文章的第一行代码中,我们明确定义了元素和索引:
接着:
如果我删除该重新声明,我会收到一个我不明白的编译错误:
'PathCollection' 要求类型 'Slice' 和 'Dictionary<String, Int>.Element'(又名 '(key: String, value: Int)')是等价的
swift - 在 Swift 5 的通用方法中展开可选类型
我正在尝试B
从 type 的实例创建 type 的实例A
,但是原始类型的某些属性A
是可选的,B
如果发生这种情况,创建应该会引发错误。
我的问题是我不知道类型T
是否是可选的,如果是,如何打开它。我正在尝试以下方法,但 swift 无法判断类型应该是什么......
下面的例子是悔恨的,真实的样本有将近一百个值。
我知道以下内容会起作用,但我不想在代码中重复这 100 次?
一定有一些......我没有想到的快速的方式来做到这一点。
swift - 在 Swift 中,如何实现一个通用系统,通过为不同的键路径注册处理器来处理类型?
我想实现一个系统,允许我通过为不同的关键路径注册处理器来一般地处理类型。
系统的一个特征应该是composition
,因此每个处理器都应该扩展一个通用的通用协议Processor
。
使用示例:
ios - 将 KeyPaths 存储在 Dictionary/HashMap 中
我在散列一个ReferenceWritableKeyPath
. 散列函数似乎ReferenceWritableKeyPath
在散列密钥路径时也考虑了 的通用属性。我已经包含示例代码来说明为什么这是一个问题:
如果你运行上面的代码,你会注意到 hash1 和 hash2 是不同的,尽管它们是指向 UILabel 相同属性的路径。
发生这种情况是因为第一个ReferenceWritableKeyPath
有一个Value
that isUIColor
而第二个ReferenceWritableKeyPath
有一个Value
that isOptional<UIColor>
我的项目要求将ReferenceWritableKeyPath
s 存储在字典中,以便关联对象 (UILabel) 的每个属性只有一个 keyPath。由于哈希值不同,这意味着相同的路径将在字典中存储为 2 个不同的键。
有谁知道我可以让它工作的方法?
~提前谢谢
swift - 存储异构键路径数组
我有一个类似的对象:
我正在尝试存储一个异构的更新数组,以便以后可以使用它们来设置值。像这样的东西。
但是,这当然在 getUpdates() 中读取Cannot convert value of type 'WritableKeyPath<MyObject, String?>' to expected argument type 'WritableKeyPath<MyObject, Any>'
.
需要有一组异构的可写键路径,然后我可以使用它们来设置值。鉴于泛型通常如何工作,我不明白为什么 String 不能等同于 Any 泛型,因为该类型是向下转换的。