草庐IT

Protocols

全部标签

swift - 仅类协议(protocol)作为具有 AnyObject 约束的关联类型的类型别名

在Swift4.0中我可以这样写protocolObserversHolder{///CompilingErrorinSwift4.1///note:possiblyintendedmatch'StringManager.ObserverValue'(aka'StringObserver')doesnotconformto'AnyObject'///note:protocolrequiresnestedtype'ObserverValue';doyouwanttoaddit?associatedtypeObserverValue:AnyObjectvarobservers:[Obser

Swift Xcode 7 beta 5 类型不能将自身作为要求

这段代码曾经是合法的:protocolFlier{typealiasOther:FlierfuncflockTogetherWith(f:Other)}structBird:Flier{funcflockTogetherWith(f:Insect){}}structInsect:Flier{funcflockTogetherWith(f:Insect){}}现在(在Xcode7beta5中)不是了。这里发生了什么?这是一个错误吗?我只是想确保Flier的采纳者使用某个Flier采纳者的参数声明flockTogetherWith。我一直都能做到。为什么突然做错了?

ios - 使用委托(delegate)/协议(protocol)将数据传递给第三方 View Controller

我有3个ViewController:http://i58.tinypic.com/2envu2x.pngViewController1是第一个,它继续到ViewController2。ViewController3是ViewController2的subview,因为ViewController2中有一个容器View。我需要将数据从ViewController1传递到ViewController3。使用传统的委托(delegate)和协议(protocol),我必须实际转至ViewController3才能将数据传递给它。但是segue是从第一个ViewController到容器Vi

ios - Swift 协议(protocol)函数重载

在直接处理协议(protocol)类型时是否可以重载协议(protocol)函数并调用正确的定义?下面是一些代码来说明这个问题protocolSomeProtocol{funcdoSomething(obj:T)}classSomeClass:SomeProtocol{funcdoSomething(obj:T){print("GenericMethod")}funcdoSomething(obj:String){print(obj)}}lettestClass=SomeClass()testClass.doSomething("Iwillusethestringspecificmet

作为通用参数的 Swift 协议(protocol)

给定这个类:classServiceRegistry{varstore=[String:AnyObject]()varallRegisteredType:[String]{returnstore.map{$0.0}}funcregisterInstance(instance:AnyObject,forTypetype:T.Type){store[String(type)]=instance}funcinstanceForType(type:T.Type)->T?{returnstore[String(type)]as?T}}有没有一种方法可以强制T必须是协议(protocol),而无需

ios - 某些 UIControl 的协议(protocol)一致性扩展

这是我的案例:我希望2个或更多UIControl符合通用协议(protocol):例如UISlider、UIStepper、MyCustomControl。这就是他们所拥有的:classUIStepper{varvalue:Float}classUISlider{varvalue:Double}classMyCustomControl{varvalue:Int}现在,我喜欢类似于这样的协议(protocol)的东西:protocolValuable{associatedtypeTvarvalue:T}然后可以使用[Valuable]。但是我当然会遇到著名的PAT问题protocolVa

swift - 如何在 swift 中为浮点值编写通用函数

我想在swift中调用浮点类型的浮点方法。funcexample(_x:T)->T{returncos(cbrt(x+1))}还有比这更好的方法吗?protocolSupportsFloatingPoint:FloatingPoint{varcubeRoot:Self{get}varcosine:Self{get}}extensionDouble:SupportsFloatingPoint{varcubeRoot:Double{returnDarwin.cbrt(self)}varcosine:Double{returnDarwin.cos(self)}}extensionFloat:

Swift where 条件检查属性是否已实现

我刚刚找到了另一种在Swift中充分利用协议(protocol)和协议(protocol)扩展的方法,方法是扩展Optional协议(protocol)以添加一个函数,这样我就可以提供默认值。我在这里写了一篇关于此的博文:https://janthielemann.de/random-stuff/providing-default-values-optional-string-empty-optional-string-swift-3-1/这篇文章的要点是我需要一种干净简单的方法来为可选字符串提供默认值,即nil或空。为此,我创建了一个Emptyable协议(protocol)并像这样

ios - 关联类型为类的协议(protocol)的扩展?

我试过这样的:protocolMyModelProtocol{varname:String{getset}}protocolMyProtocol{associatedtypeModel:MyModelProtocolfuncchangeModel(_model:Model)}extensionMyProtocolwhereModel:AnyObject{}编译器很高兴。然而,在这个扩展中,编译器仍然不确定模型是类还是结构。示例:extensionMyProtocolwhereModel:AnyObject{funcchangeModel(_model:Model){model.name

protocols - 类型 'className -> () -> className!' 不符合协议(protocol)

我在摆弄Swift。我有一个协议(protocol)定义为protocoltimerProtocol{functimerFired()}持有对委托(delegate)的引用的类classStopwatch:NSObject{vardelegate:protocolinit(delegate:protocol){self.delegate=delegate}...}和一个实现协议(protocol)的类classStopwatchesTableViewController:UITableViewController,timerProtocol{functimerFired(){print