如何解决协议和类字段类型之间的冲突?(代码片段)

author author     2023-05-13     135

关键词:

我有一个协议和一个我想扩展的类。该协议需要某种类型的字段,并且该类具有与此类型的Implicitly Unwrapped Optional相同名称和类型的字段。

这个类可以扩展这个类吗?如果是,那怎么样?

如果我尝试编写扩展,Xcode会给出不符合的错误。但是,如果我将字段添加到扩展名中,则会出现重新声明错误。

protocol Named 
   var name: String  get 


class Person 
   var name: String!



extension Person: Named  
// Type 'Finances.Account' does not conform to protocol 'Named'

答案

protocol中声明的属性名称和类型必须与符合的类完全匹配。

因此,如果不更改协议或符合类型中的属性类型,则无法解决错误。您还可以重命名其中一个属性,并将匹配属性作为新字段添加到符合类型。

所以要么:

protocol Named 
   var name: String  get 


class Person 
    var name: String

    init(_ name:String) 
        self.name = name
    



extension Person: Named 


要么

protocol Named 
   var name: String  get 


class Person 
   var _name: String!



extension Person: Named  
    var name: String 
        return _name
    

正如@ user28434指出的那样,有一个(难看的)解决方法。您可以创建一个与Person类的可选性匹配的包装器协议,使该协议继承原始协议,在新协议的扩展中声明非可选变量,并使Person符合新协议而不是原始Named

protocol Named 
    var name: String  get 


class Person 
    var name: String!


protocol Namedd: Named 
    var name: String!  get 


extension Namedd 
    var name: String 
        return name!
    


extension Person: Namedd 


前端笔记三前后端通信(http协议和ajax)(代码片段)

目录一、http协议请求报文1.请求行2.首部字段3.消息体响应报文1.状态行二、AjaxXMLHttpRequest1.open2.send3.获取服务器返回的数据三、实例一、http协议http协议就是前端与后端之间相互通信所遵循的协议,协议定义了传输信息的格式... 查看详情

swift学习笔记-协议和扩展(代码片段)

协议声明使用protocol来声明协议。protocolExampleProtocolvarsimpleDescription:Stringgetmutatingfuncadjust()协议的遵循类、枚举以及结构体,都可以遵循某个协议。类classSimpleClass:ExampleProtocolvarsimpleDescription:String=“Averysimp 查看详情

swift通过使用协议和关联类型强类型或结构类型标识符(代码片段)

查看详情

swift通过使用协议和关联类型强类型或结构类型标识符(代码片段)

查看详情

mybatis学习总结——解决字段名与实体类属性名不相同的冲突(代码片段)

...一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。一、准备演示需要使用的表和数据CREATETABLEorders(order_idINTPRIMARYKEYAUTO_INCREMENT,order_noVARCHAR(20),order_priceFLOAT);INSERT 查看详情

如何在 Swift 中正确实现不同视图控制器之间的协议和委托?

】如何在Swift中正确实现不同视图控制器之间的协议和委托?【英文标题】:HowtoproperlyimplementprotocolsanddelegatesbetweendifferentviewcontrollersinSwift?【发布时间】:2020-03-2306:04:51【问题描述】:所以我是协议和委托的新手。但是,在了解... 查看详情

ios-协议和代理

...烦的,所以就不想去碰他,不过,你要知道协议和代理会解决一些ios无法解决的问题(论其重要性)。什么是协议和代理简单一点来说就是页面之间的传值,当页面A跳转到页面B(可能会附带参数,这不影响),或者是页面B将数据返... 查看详情

httptcp/ip协议和socket之间的区别和联系

总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像HTTP、FTP、Telnet。传输层协议和应用层协议... 查看详情

网络编程——tcp协议和通信(代码片段)

第1章 TCP通信TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。而TCP通信是严格区... 查看详情

距离矢量路由协议和链路状态路由协议(代码片段)

...2个问题,无限计数和路由环路问题。当然也有相应的解决办法。1.无限计数问题及解决方法请看下列拓扑图:假设初始状态R0、R1、R2构成的网络已经收敛,当10.4.0.0这个网络出现问题时,R2觉察到该链路出现问题&#x... 查看详情

swiftswift中协议和扩展的各种用途(代码片段)

查看详情

符合协议和类的 Swift 属性

】符合协议和类的Swift属性【英文标题】:SwiftPropertythatconformstoaProtocolandClass【发布时间】:2015-05-2801:38:22【问题描述】:@property(strong,nonatomic)UIViewController<UITableViewDelegate>*thing;我想在Swift中实现这个Objective-C代码中的属性。... 查看详情

http协议和httpd的配置(代码片段)

http协议和httpd的配置来自马哥教育学习笔记一.URL:UnifromResourceLocatorURL方案:scheme服务器地址:ip:port资源路径:http://www.magedu.com:80/bbs/index.php,https://二.基本语法:br/>params:参数http://www.magedu.com/bbs/hello;gender=fquery:http 查看详情

swift协议和扩展迅速(代码片段)

查看详情

tcp/ip详解卷1:协议—arp:地址解析协议和rarp:逆地址解析协议

ARP为IP地址到对应的硬件地址之间提供动态映射,ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,... 查看详情

如何解决 Testcafe 和 Jest 之间的类型冲突? (“无法重新声明块范围变量'test'”)

】如何解决Testcafe和Jest之间的类型冲突?(“无法重新声明块范围变量\\\'test\\\'”)【英文标题】:HowdoIresolveatypeconflictbetweenTestcafeandJest?("Cannotredeclareblock-scopedvariable\'test\'")如何解决Testcafe和Jest之间的类型冲突?(“无... 查看详情

迭代器协议和for循环工作机制(代码片段)

...;例如:生孩子2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)3.协议是一种约定,可迭代对象实现了迭代器协议,python中的内 查看详情

python迭代器协议和生成器(代码片段)

查看详情