草庐IT

PROTOCOL

全部标签

swift - 如何创建受结构约束的泛型类?

作为SwiftLanguageGuide指出泛型类型可以像这样约束到类或协议(protocol):publicclassMyGenericClass{funcprintEquality(a:T,b:T){ifa==b{print("equal")}else{print("notequal")}}}我能否以某种方式将T限制为struct?我的用例是一个只应由结构使用的值类型的观察器类。作为旁注:我知道有例如class-only协议(protocol),只能由类实现。这并没有真正相关,但表明有时有一种特殊的方法可以达到目标。protocolSomeClassOnlyProtocol:cla

Swift:将类型 T 的数组传递给采用 T 协议(protocol)数组的方法

我正在尝试编写一个类,该类具有符合MyProto的对象数组,并且我有一个方法可以接受[MyProto]以进行各种处理,然后再进行处理添加到该数组。这是一个Playground。protocolMyProto{funcsayHello()}extensionMyProto{funcsayHello(){print("hello")}}structMyStruct:MyProto{}classMyClass{varprotos:[MyProto]=[]funcdoSomethingAndThenStore(newProtos:[MyProto]){forprotoinnewProtos{p

swift - 如何约束函数参数的协议(protocol)关联类型

为了好玩,我尝试扩展Dictionary类以复制Python的Counter类。我正在尝试实现init,采取CollectionType作为唯一的论点。但是,由于CollectionType,Swift不允许这样做。的关联类型。所以,我正在尝试编写这样的代码:importFoundation//Mustconstrainextensionwithaprotocol,notaclassorstructprotocolSingletonIntProtocol{}extensionInt:SingletonIntProtocol{}extensionDictionarywhereValue:

swift - 需要扩展什么协议(protocol)以允许泛型类型的 === 运算符? (错误 : Binary operator '===' cannot be applied to two 'T' operands)

我收到编译器错误:Binaryoperator'==='cannotbeappliedtotwo'T'operands其中T是泛型类型,我只是比较T类型的两个项目。所以我想我需要告诉它===运算符可以通过使T扩展协议(protocol)来在T上使用。如果它是==,我会使用Equatable,但我看不出我应该使用什么来进行身份比较。或者有变通办法吗?编辑:下面是一段说明问题的示例代码。我在这里添加了“AnyObject”,它会在实例化类时导致编译错误。如果删除“AnyObject”,则会导致“===”出错。importFoundationprotocolMessenger:AnyObje

swift - 在 Swift 中用结构鸭子打字

Forthesakeofsimplicity,I'mgoingtosimplifytheendgoal我正在尝试为Swift编写一个100%通用的PostProvider协议(protocol)。但是,因为“帖子”可能包含不同平台上的不同信息,所以协议(protocol)必须是“通用类型”。以结构作为参数,它定义了任何底层帖子的结构。structPost{//OnlyfieldsrequiredbyALLpostsvarid:UInt64vartitle:Stringvarcontent:String}structWPPost:Post{//WordPresspostsalsohave

ios - 类不符合协议(protocol)

这是我的协议(protocol):protocolLiveTableViewCellProtocol:class{vardata:LiveCellObjectProtocol!{getset}}这是我的课:classRepliesTableViewCell:UITableViewCell,LiveTableViewCellProtocol{vardata:RepliesCellObject!//ERROR!doesnotconformtoprotocol.}RepliesCellObject定义为:publicclassRepliesCellObject:NSObject,LiveCe

Swift 协议(protocol)数组添加与实例化

在swift3.0Xcodebeta3中,我定义了一个相当简单的协议(protocol)和两个实现它的结构,如果我在创建对象时初始化数组,它就可以工作,但是如果我尝试添加元素,我会得到一个错误:Cannotconvertvalueoftype'[H]'toexpectedargumenttype'inout_'这不可行吗?protocolH{varv:Int{getset}funchello()}structJ:H{varv:Intfunchello(){print("j")}}structK:H{varv:Intfunchello(){print("k")}}letag:[H]=[K

Swift:将实际类型的数组转换为协议(protocol)类型的数组

假设您有一个为Int实现的协议(protocol)ToString,以及一个采用ToString数组的函数。尝试将Int数组传递给此函数会导致错误Cannotconvertvalueoftype'[Int]'toexpectedargumenttype'[ToString]'.但是,在将数组传递给函数之前在数组上使用map是可行的。这是执行类型转换的假定方法,还是有一种方法不会导致遍历数组?还是编译器优化了?完整示例:protocolToString{functoString()->String}extensionInt:ToString{functoString()->String{

ios - 以 Swifty(/协议(protocol))方式在 Controller 之间传递信息?

我正在尝试将信息从ControllerA传递到ControllerB。问题是,我想要:简洁:尽量减少XCode对一些关键信息的自动补全。我想以一种简单的方式知道在将Controller插入堆栈之前所需的确切参数。避免转场。根据我的理解,segues在Storyboard中创建了很多紧密耦合。我不想依赖Storyboard来传递信息。(每次我想将ControllerA切换到另一个Controller时,我都必须去Storyboard中进行一些更改)。我可能会在某个时候将我的应用拆分成多个Storyboard,而处理转场可能会非常烦人。Beautiful:也许Swift可以提供一个我没有想

arrays - 如何创建扩展以允许自定义类型的数组符合协议(protocol)?

我有一个自定义类型Banana,我想创建Array的扩展(或者,如果必须的话,Sequence)Banana符合协议(protocol)CustomStringConvertible以便在Banana数组上调用description将返回“Abunch香蕉”。这可能吗?如果可能,我将如何去做? 最佳答案 简短的回答:没有。您可以约束扩展,但受约束的扩展不能包含继承子句(上面链接的Swiftproposal@CodeDifferent正是您要查找的内容)。一种解决方法是制作受限扩展,但只需添加您自己的属性,而不是让它符合CustomS