0

这是参考https://stackoverflow.com/a/47765972/8833459。给出以下声明:

let fooPaths: [WritableKeyPathApplicator<Foo>] = [WritableKeyPathApplicator(\Foo.bar), WritableKeyPathApplicator(\Foo.baz)]

是否有一个 init 或其他可以完成的操作,以便以下(或类似的)也可以工作?

let fooPaths: [WritableKeyPathApplicator<Foo>] = [\Foo.bar, \Foo.baz]

原来的说法就是打字太多了!我的“首选”方法目前给出了错误:

error: cannot convert value of type 'WritableKeyPath<Foo, String>' to expected element type 'WritableKeyPathApplicator<Foo>'
4

1 回答 1

0

类型是不必要的:

let fooPaths = [WritableKeyPathApplicator(\Foo.bar), WritableKeyPathApplicator(\Foo.baz)]

第二个Foo是不必要的。

let fooPaths = [WritableKeyPathApplicator(\Foo.bar), WritableKeyPathApplicator(\.baz)]

如果您确实提供了类型,也是第一个:

let fooPaths: [WritableKeyPathApplicator<Foo>] = [WritableKeyPathApplicator(\.bar),
                                                  WritableKeyPathApplicator(\.baz)]

如果主要关注的是打字,请添加本地类型别名:

typealias WKPA<T> = WritableKeyPathApplicator<T>
let fooPaths: [WKPA<Foo>] = [WKPA(\.bar),
                             WKPA(\.baz)]
于 2018-06-14T18:16:04.980 回答