草庐IT

PROTOCOL

全部标签

swift - 你如何编写一个协议(protocol)来指定 Swift 中算术运算符的存在?

这是一个例子。编写一个函数来乘以两个double非常简单:funcMultiplyDoubles(_x:Double,_y:Double){returnx*y}MultiplyDoubles(3,5)//returns15但假设我想编写一个通用函数来执行此操作:funcMultiplyValues(_x:T,_y:T){returnx*y//ERROR}MultiplyValues(3,5)但这会引发错误:二元运算符“*”不能应用于“T”操作数。我知道我需要编写一个协议(protocol)来指定*可以应用于它,但我该怎么做呢?我试过:protocolMultipliable{stati

具有关联类型错误的 Swift 协议(protocol)

我创建了一个函数类:Bar,Bar使用属于它的委托(delegate)来做一些特定的事情,这个委托(delegate)遵守协议(protocol)FooDelegate,类似的东西:protocolFooDelegate{associatedtypeItemfuncinvoke(_item:Item)}classSomeFoo:FooDelegate{typealiasItem=Intfuncinvoke(_item:Int){//dosomething...}}classBar{//InBarinstanceruntime,itwillcalldelegatetodosomethin

ios - 具有关联类型要求和默认实现的 Swift 协议(protocol)

长期以来,我一直在努力研究Swift协议(protocol)和关联类型。我再次从基础开始,真正了解出了什么问题,我遵循了这个articleRobNapier的SwiftProtocolswithAssociatedTypeRequirement中的TypeErasure,但我仍然没有运气。找到下面的代码//AnAnimalcaneatprotocolAnimal{associatedtypeFoodfuncfeed(food:Food)->Void}structAnyAnimal:Animal{privatelet_feed:(Food)->Voidinit(_base:Base){_

属性中的 Swift 可变集

protocolDeck{varcards:[String]{getset}//{getmutableset}}structMyDeck:Deck{varcards:[String]=(1...7).map{_inreturnString(rand())}}只是感兴趣我需要在协议(protocol)中指定{getmutableset}吗?如果我的setter改变了我的结构,找不到任何关于为什么不在setter声明中使用mutable关键字的文档 最佳答案 首先注意讨论的关键词是mutating,不是mutable.set的默认状态是

ios - 在 Swift 中从选择器调用协议(protocol)函数

我有一个协议(protocol),充当一个View和另一个View之间的委托(delegate)。协议(protocol)看起来(类似于)这样的:protocolMyProtocol:class{funcfunctionOne()}协议(protocol)是在View2中实现的,类似于:extensionView2:MyProtocol{funcfunctionOne(){print("HelloWorld"}}现在我希望此方法由View1中的按钮目标调用。因此在View1我有一行:myButton(self,action:#selector(delegate?.functionOne

ios - Swift:通用类型符合协议(protocol)

我对通用类型有一些疑问。我想检查泛型类型是否符合某些协议(protocol)并在传递给另一个泛型函数之后。例如我有功能:funcrequestSignal(target:Api)->SignalProducer我想做这样的事情:funcrequest(target:Api,withObjectTypetype:T.Type){ifletmappableType=typeas?Mappable.Type{letrequestSignal:SignalProducer=self.requestSignal(target)}但如果我尝试通过T-它不符合Mappable。如果传递ma​​ppa

ios - 数组中的 Swift 通用协议(protocol)类类型

我们已经实现了一个协议(protocol),Reusable,以简化我们的UITableViewCell的UITableView注册/出队实现。protocolReusable:class{staticvardefaultIdentifier:String{get}}extensionReusablewhereSelf:UITableViewCell{staticvardefaultIdentifier:String{returnString(describing:self)}}classTestTableViewCell:UITableViewCell,Reusable{}class

swift - 如何扩展协议(protocol) Optional,其中 Wrapped 项目是 Equatable 通用元素数组?

我会说这个问题是关于正确声明扩展的。我想扩展充满通用元素的数组,其中元素符合Equatable。我设法做到了:extensionArraywhereElement:Equatable{//mycode}但是我想知道当充满Equatable元素的Array在Optional中时如何正确声明扩展?我知道在这种情况下我实际上是在扩展协议(protocol)Optional,但我无法弄清楚其余部分我在想:extensionOptionalwhereWrapped:Array&Equatable{//mycode}想不通。有任何想法吗? 最佳答案

ios - 比较两个委托(delegate)对象是同一个实例

我对比较代表感到困惑。我要做的是检查两个玩家是否相同。但是当我尝试下面的代码时,我得到一个编译器错误:“IPlayer不可转换为MirrorDisposition”。在Swift中检查委托(delegate)的理想方法是什么?这是我的代码:varstr="Hello,playground"protocolIPlayer{varx:Int{getset}}protocolIMatch{varballOwner:IPlayer?{getset}}classPlayer:IPlayer{varx:Int=5}classMatch{varballOwner:IPlayer?}varfirstP

ios - ViewController 不符合 Swift 上的协议(protocol)

我在调用类(class)中的代表时遇到问题。我有一个SideBarTableController和SideBar.swift文件。它工作正常,直到我注销并重新登录。这是代码。它一直告诉我“ViewController”不符合协议(protocol)“SideBarDelegate”。我是编程新手,如果这含糊不清,请提前致歉。任何事情都会有所帮助,谢谢!importUIKitimportiAdclassViewController:UIViewController,SideBarDelegate{-----Thisiswheretheerrorishappening@IBOutletva