问题标签 [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 - 将可选类型转换为非可选类型
以下代码引发编译错误:
这是因为type(of: obj[keyPath: \MyObj.nestedObj])
,NestedObject?
当然不能初始化。我需要一种方法来解开可选类型并获得非可选类型NestedObject
。
必须维持的假设。
- 我必须使用可选项,因为有可能
nestedObj
为零。 - 我不知道是什么类型
NestedObject
。它可以是任何类型,但我确信这些类型都是Initable
. - 我需要能够
nestedObject
通过 keypath 设置我的属性。 - 如果
nestedObject
是 nil,我需要创建一个新NestedObject
的并通过 keypath 设置值。
这是较大系统的一小部分,因此必须考虑上述假设。我无法改变那些。
swift - 使用泛型将 PartialKeyPath 向下转换为 ReferenceWriteableKeyPath?
我想要一个简单的序列化实现,它存储一个类的各种 KeyPath 的值并应用它们。我知道这可以通过手动存储变量来实现,但我更喜欢使用 KeyPaths,因为添加额外的路径会更容易。请参见下面的示例:
如果我在 applyValue() 中添加断点,keyPath 将显示为预期的 ReferenceWriteableKeyPath。同样,如果我尝试通过显式声明预期值类型(例如ReferenceWriteableKeyPath<Model, Int>
or ReferenceWriteableKeyPath<Model, Bool>
)来对 KeyPath 进行类型转换,则类型转换工作正常。但是,编写的代码永远不会进入条件。有没有人看到代码的问题或知道如何使这种通用的向下转换工作?
swift - Swift - 改变枚举关联类型属性的值
我有 2 个符合一个协议的结构。我创建了带有关联类型的枚举作为结构类型。当我尝试使用动态成员查找访问协议类型 A 的属性时,getter 工作正常。但是 Set 方法抛出错误:根类型为“A”的密钥路径不能应用于类型为“A1”/“A2”的基础
有时我也会收到此错误:无法通过下标分配:'a' is immutable
任何想法都会有所帮助
swift - Swift:.contains(where:) 使用键路径表达式
有没有办法使用键路径表达式来简化 Swift 中的样板代码contains(where:
)?
例如
上面的例子是否可以在 Swift 中表达,使用\.bool
on struct Struct
,而不诉诸于structs.filter(\.bool).count > 0
?
swift - 通过 KeyPath / WritableKeyPath 快速初始化
有没有办法通过 Key Path 设置属性来初始化 Swift 类型?
尝试通过密钥路径初始化失败并出现以下错误:
'self' 在所有存储属性初始化之前使用
从初始化程序返回而不初始化所有存储属性
如果该属性使用let
而不是var
,则会给出错误:
无法通过下标赋值:关键路径是只读的
通过键路径设置属性init
似乎不起作用。为什么不?有什么解决方法吗?
这个问题是否在开源 Swift Evolution 过程中被讨论或提出过?
swift - Swift - 从属性访问器推断 KeyPath
有没有办法在其访问器中推断属性的 KeyPath?
我有以下设置:
我正在使用KeyPath
而不是String
这样我就不会出现拼写错误。
如何\.value
从 的访问器中推断出YourOtherClass.value
?
swift - 如何编写 KeyPath 来引用字典的值
假设我有一个这样的结构:
是否可以构造一个键路径来引用属性中某些东西的值User.kids
?像\User.kids[KidId]
什么?
具体来说,我想构建一个WritableKeyPath<User,KidName>
. 我以为您可以通过键路径进入字典和数组,但我终其一生都无法在互联网上的任何地方找到语法。也许这是不可能的?
ios - 键路径值类型“Int”无法转换为上下文类型“String”
我正在尝试将包含 KeyPath 和排序顺序类型的多个元组传递给应该进行排序的方法。
我有这个方法:
我正在这样使用它:
现在,因为pageViews
和sessionDuration
属性都是integers
,这将起作用。
但是如果我想传递两个不同类型的属性(比如String
和Int
),我会收到这个错误:
这是其余的代码,但我想不是那么相关:
我应该如何定义排序方法以便它接受异构键路径?
swift - 在 Swift 中获取 Codable 值的编码值
我正在开发一个以 JSON 格式存储可编码类型的 Swift 服务。该类型还定义了一个嵌套CodingKeys
枚举,以在编码为 JSON 时定义属性名称。例如,我可能有一个看起来像这样的类型:
现在我有一个函数想要对这些属性之一进行操作,由该属性的键路径指定。使用示例中的类型,我想要一个可以这样调用的函数:
我的函数是使用以下KeyPath
类型声明的:
为了实现我的功能,我想以某种方式不仅可以访问名为 的密钥路径参数usingProperty
,还可以访问与其关联的编码密钥。因此,当使用属性的键路径调用时myIntProperty
,我想获取编码时使用的名称,即int_property
.
有没有办法从KeyPath
参数及其根类型的CodingKeys
枚举中得出这个值?