首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift协议扩展中变量的无效重命名

Swift协议扩展中变量的无效重命名
EN

Stack Overflow用户
提问于 2017-01-04 13:23:08
回答 1查看 2.7K关注 0票数 3

在Swift中,据我所理解,协议描述了可以应用于数据结构的属性。然后,协议扩展允许根据它们所应用的数据结构定义这些属性。

如果是这样,为什么会出现以下错误:

无效的重新声明“无效”

在这条线上:

代码语言:javascript
运行
复制
extension CausesError where Self: Example { var invalid: Bool { return true } }

在此代码中:

代码语言:javascript
运行
复制
struct Example: CausesError { }

protocol CausesError { var invalid: Bool { get } }

extension CausesError where Self: Example { var invalid: Bool { return true } }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-07 18:48:17

为了综合@dfri对那些see this later用户所说的话,实际的错误是由以下原因造成的:

代码语言:javascript
运行
复制
extension CausesError where Self: Example

因为示例是一个结构,因此没有Self属性。

问题是我对协议扩展有一个根本的误解。

结构是具体的类型,因此定义无效的“默认实现”只需与协议一致。我们可以选择通过扩展而不是在声明中让示例符合CausesError:

代码语言:javascript
运行
复制
extension Example: CausesError { var invalid: Bool { return true } }

但这主要是语义(w.r.t )。直接符合)。然而,这与提供默认实现(对于一组对象(例如从类类型派生的对象或符合某种协议)不一样,而只是特定类型对给定协议的一致性。

因此,我应该做的(为了在协议级别上提供默认实现,甚至是数据类型)是简单的:

代码语言:javascript
运行
复制
extension CausesError { var invalid: Bool { return false } }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41464878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档