提问人:Sebastian 提问时间:12/1/2022 最后编辑:AnderCoverSebastian 更新时间:4/2/2023 访问量:61
为什么 Swift 编译器可以分配给协议约束的类型,但当它包装在另一个泛型类型中时却不能?
Why can the Swift compiler assign to a protocol-constrained type but can't when it's wrapped in another generic type?
问:
考虑一下这个玩具示例代码,它在 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 如何使编译器接受赋值?
答: 暂无答案
评论