为了账号安全,请及时绑定邮箱和手机立即绑定

议定书不符合自己的要求?

议定书不符合自己的要求?

慕村9548890 2019-05-28 17:53:45
议定书不符合自己的要求?为什么这个Swift代码没有编译?protocol P { }struct S: P { }let arr:[P] = [ S() ]extension Array where Element : P {     func test<T>() -> [T] {         return []     }}let result : [S] = arr.test()编译器说:“类型P不符合协议P”(或者,在Swift的更高版本中,“不支持使用'P'作为符合协议'P'的具体类型。”)。为什么不?不知怎的,这感觉就像语言中的漏洞。我意识到问题源于将数组声明arr为协议类型的数组,但这是不合理的事情吗?我认为协议正是为了帮助提供类似层次结构的结构?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

如果您将CollectionType协议扩展而不是Array协议约束作为具体类型,则可以按如下方式重写以前的代码。

protocol P { }struct S: P { }let arr:[P] = [ S() ]extension CollectionType where Generator.Element == P {
    func test<T>() -> [T] {
        return []
    }}let result : [S] = arr.test()


查看完整回答
反对 回复 2019-05-28
  • 3 回答
  • 0 关注
  • 748 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信