草庐IT

protocol-buffers-3

全部标签

使用相同类型约束的 Swift 协议(protocol)与关联类型的一致性

我正在尝试定义一个扩展协议(protocol)A的协议(protocol)B(后者包含关联的类型C),同时使用编译器建议的具有相同类型约束的where子句。但是,这样做时代码将不再编译。这是一个Swift错误(在本例中是Swift4)吗?更具体地说,下面的代码没有编译错误:类型“E”不符合协议(protocol)“A”classD{}protocolA:class{associatedtypeC:AnyObject}protocolB:AwhereC==D{}classE:B{}如下所示更改协议(protocol)B的定义将编译但会显示此警告:从协议(protocol)“A”覆盖关联类

Swift 协议(protocol)扩展 : cannot assign to property: '' is a get-only property

我想我不明白协议(protocol)扩展应该如何工作。我试过这个:protocolP{varh:[String:Any]{setget}}extensionP{varh:[String:Any]{get{return[:]}set{}}}structS:P{init(){self.h=["o":"o"]}}我的目标是S具有P的属性,并且不需要在结构定义中重新声明它。但是,当我创建lets=S()时,s.h始终等于[:]而不是["o":"o"].当然,这是因为我的setter是空的,但是我不知道如何去做我想在这里实现的。感谢您的帮助。 最佳答案

swift - 为什么 Swift 不允许在 class init 中给 self 赋值,而在 protocol init 中却不允许?

我经常发现自己喜欢在struct、enum和protocol的初始化器中,我可以编写类似self=someValue。当我有一些预定义值或正在克隆现有值时,这非常有用。但是,此语法不适用于classes。我也不知道为什么。Cannotassigntovalue:'self'isimmutable如果问题是双重初始化,Swift编译器知道我是否、何时以及在何处调用指定的super或self初始化器,因此它知道我是否完成初始化此实例。如果担心的是我还没有调用指定的初始值设定项,那么它应该没问题,因为我只是让这个实例成为对另一个实例的引用(2个变量1个指针)。如果担心的是并发访问可能导致se

swift - 区分 Swift 协议(protocol)中继承的 `associatedtype`

我正在使用一个库,它定义了两个协议(protocol),A和B,每个协议(protocol)都有它的associatedtypeT,像这样:protocolA{associatedtypeT}protocolB{associatedtypeT}这两个协议(protocol)在T上没有耦合,因此理论上第三个协议(protocol)可以继承A和B,typealiasing每个T到不同的类型。不幸的是,我无法让Swift区分这两个T。我试过类似的东西:protocolC:A,B{typealiasA.T=StringtypealiasB.T=String}但这不是受支持的语法。有办法解决这个

Swift:使用符合相同协议(protocol)的嵌套枚举案例的代码更少

我尝试在以下场景中编写更少的代码:我有这个Queryable协议(protocol)和一个Parameter枚举:protocolQueryable{varurlQuery:URLQueryItem{get}}enumPaginationParameter:Queryable{casepage(Int)casepageSize(Int)varqueryItem:URLQueryItem{switchself{case.page(letpage):returnURLQueryItem(name:"page",value:page.description)case.pageSize(let

swift - 在运行时从 protocol.Type 引用动态实例化

我之前在非常微小的细节,以便真正破解它。swiftprogramtointerface您可能会提示或否决这个问题不完整,但事情就是这样,它基于设计模式,所以如果您不熟悉设计模式或哲学“编程接口(interface)而不是实现”然后不要提示或否决投票。寻找可以破解它的SWIFT专家。祝一切顺利publicprotocolIAnimal{init()funcspeak()}classTest{funcinstantiateAndCallSpeak(animal:IAnimal.Type){//usetheanimalvariabletoinstantiateandcallspeak-//n

arrays - Swift - 将协议(protocol)数组向上转换为 super 协议(protocol)数组会导致错误

在Swift中,我注意到我可以将符合名为SubProtocol的协议(protocol)的对象向上转换为另一个名为SuperProtocol的协议(protocol),它是子协议(protocol)。但是我不能对协议(protocol)数组做同样的事情。这是我在Playground中运行的示例代码:protocolSuperProtocol{}protocolSubProtocol:SuperProtocol{}classMyObject:SubProtocol{}letvalue1:SubProtocol=MyObject()letvalue2:SuperProtocol=value

swift - 将结构数组分配给协议(protocol)数组

假设我有以下内容:protocolMyProtocol{}structMyStruct:MyProtocol{}vars1=MyStruct()vars2=MyStruct()vars3=MyStruct()varstructArray=[s1,s2,s3]当我尝试将这个结构数组分配给协议(protocol)数组时(structArray中的每个结构都符合):varprotocolArray:[MyProtocol]=structArray我收到此错误:无法将类型为“[MyStruct]”的数组转换为指定类型“[MyProtocol]”我希望因为数组中的每个对象都符合协议(protoc

objective-c - Throwing 方法不能是@objc 协议(protocol)的成员,因为它返回类型为 'Bool' 的值

我收到以下错误:Throwingmethodcannotbeamemberofan@objcprotocolbecauseitreturnsavalueoftype'Bool';return'Void'oratypethatbridgestoanObjective-Cclass定义Swift协议(protocol)时也需要桥接到Objective-C:@objcpublicprotocolSaving{funcsave()throws->Bool}是否有其他方法可以定义返回Bool的Swift方法,可能会抛出错误并与Objetive-C兼容? 最佳答案

swift - 在 swift 中,如何返回符合协议(protocol)的相同类型的对象

我有以下协议(protocol)protocolJSONInitializable{staticfuncinitialize(fromJSON:NSDictionary)throws->Self?}现在我试图让该函数返回任何符合协议(protocol)的类。IE。如果我有符合协议(protocol)的Foo类,我想从该方法返回一个Foo对象。我该怎么做?extensionFoo:JSONInitializable{staticfuncinitialize(fromJSON:NSDictionary)throws->Foo?{}}我得到错误:Method'initialize'innon