为什么 Swift 编译器可以分配给协议约束的类型,但当它包装在另一个泛型类型中时却不能?

Why can the Swift compiler assign to a protocol-constrained type but can't when it's wrapped in another generic type?

提问人:Sebastian 提问时间:12/1/2022 最后编辑:AnderCoverSebastian 更新时间:4/2/2023 访问量:61

问:

考虑一下这个玩具示例代码,它在 Playground 中编译得很好:

var x: any Hashable
let y = "String"
x = y

然后这个,它也编译得很好:

var x: [any Hashable]
let y = ["String"]
x = y

虽然这不会:

struct Wrapper<T> {
    let wrapped: T
}

var x: Wrapper<any Hashable>
let y = Wrapper(wrapped: "String")
x = y // >>> Cannot assign value of type 'Wrapper<String>' to type 'Wrapper<any Hashable>'

我理解错误消息,并且这些嵌套类型彼此不同。但是,包装在 Array 中与包装在我的通用包装器结构中有什么不同?

我的 Wrapper 结构是否缺少某些内容?Array 如何使编译器接受赋值?

Swift 泛型不 变性 嵌套类型

评论

0赞 AnderCover 4/2/2023
这回答了你的问题吗?迅速通用胁迫误会

答: 暂无答案