草庐IT

SMB1Protocol

全部标签

swift - 重新符合协议(protocol)/多次符合/覆盖关联类型

给定以下具有关联类型的协议(protocol):protocolP{associatedtypeTfuncf(t:T)}和类A符合协议(protocol)P:classA:P{funcf(t:String){print(t)}}有什么方法可以覆盖子类“B”中对“P”的一致性,以便我们可以更改关联类型“T”吗?classB:A,P{//Redundantconformanceof'B'toprotocol'P'funcf(t:Int){super.f("Hello")print(2*t)}}写B符合P是多余的并给出错误。B将两次遵守协议(protocol),即使没有子类化也是不可能的。我

swift - 继承自@objc协议(protocol)

我有这个协议(protocol)继承@objcprotocolBase{}protocolSome:Base{}检查它的代码main.swift:importFoundationclassModel1:NSObject{}extensionModel1:Some{}classModel2:NSObject,Some{}functest(){letm1:NSObject=Model1()letm2:NSObject=Model2()print("m1isSome?\(m1isSome)")print("m2isSome?\(m2isSome)")print("m1isBase?\(m1i

ios - 在动态框架 Objective C 和 Swift 中混合搭配实现目标协议(protocol)的 Swift 类,但找不到定义

这是我们的设置。我们有一个Pod,即一个带有ObjectiveC和Swift类的动态框架,在大多数情况下都可以正常工作,但最近我们有一个实现“ObjcProtocol”的“SwiftClass”。我们需要在ObjectiveC代码中使用这个“SwiftClass”。因此,当生成“MixAndMatchFramework-Swift.h”时,它具有“SwiftClass”的定义,但它没有“ObjcProtocol”的定义,因为它不能在“MixAndMatchFramework-Swift.h”中重新定义,这将是一个重复定义。现在尝试做的是包含一个header,但header不存在,如“”

protocols - 如何在 ObjC 框架中使用 Swift 协议(protocol)

我刚开始在我的ObjC框架项目中添加Swift,因为它很新,直接解决了与CloudKit的差距,因此逐步将代码迁移到Swift可能很有趣。我想从一些简单的东西开始,一个协议(protocol)。我做了以下事情:-我创建了一个Swift文件,如你所知,框架没有桥接header-在此文件中添加了我的协议(protocol)我知道我喜欢在类里面使用它,但如何使用呢?类的解决方案很简单,您只需定义一个前向声明。但是是关于协议(protocol)的吗?在他们看来,这是我必须迁移的最后一个元素,或者您知道一种方法吗?更新:我忘记提到的是,我将协议(protocol)标记为@objc,因为通常可以在

ios - 在 Swift 中使用泛型协议(protocol)实现委托(delegate)

我正在尝试创建一个委托(delegate)协议(protocol)来实现一个函数,该函数传递一个泛型类型的数组。我尝试了几种组合,但似乎没有一种能奏效。这是我所达到的最近似的结果。这是协议(protocol):protocolAPIControllerProtocol{typealiasTfuncdidReceiveAPIResults(results:[T])}这是委托(delegate)人对象:classAPIController{typealiasElementType=Uvardelegate:ElementType?init(delegate:ElementType){sel

swift - 派生类不符合协议(protocol)

importFoundationimportSwiftstructHasType{staticfuncinObject(object:T)->Bool{returnobjectisType}}@objcprotocolMyBaseProtocol:class{}@objcprotocolMyDerivedProtocol:MyBaseProtocol{}@objcclassMyBaseClass:MyDerivedProtocol{}@objcclassMyDerivedClass:MyBaseClass{}letmbc=MyBaseClass()letmdc

arrays - 向下转换多个协议(protocol) Array<protocol<P1, P2>> 到 Array<P1>

所以我有两个数组vararrayOne:Array>vararrayTwo:Array其中P1和P2是协议(protocol)。问题是如何进行向下转型arrayTwo=arrayOneasArray我从Xcode得到的是:Cannotconvertvalueoftype'Array>'tospecifiedtype'Array' 最佳答案 您需要转换数组的元素,而不是数组本身。arrayTwo=arrayOne.map{$0asP1}或者正如MartinR所说,甚至不需要强制转换元素。arrayTwo=arrayOne.map{$0

swift - Swift 是否严格执行协议(protocol)变量中的类?

协议(protocol)P需要C类的变量v。类X实现协议(protocol)P声明一个变量v类C1whereC1扩展C。代码如下:importFoundationclassC{}classC1:C{}protocolP{varv:C{getset}}classX:P{varv:C1init(withVv:C1){self.v=v}}Xcode提示这个错误:Type'X'doesnotconformtoprotocol'P'Protocolrequiresproperty'v'withtype'C'Candidatehasnon-matchingtype'C1'为什么编译器强制我匹配协议

ios - 从父类(super class)调用由子类实现的协议(protocol)方法

我有多个继承自基本TableViewController类的TableViewController类,如下所示:classBasicTableViewController:UITableViewController{}classSpecificTableViewController:BasicTableViewController{}classAnotherSpecificTableViewController:BasicTableViewController{}然后我创建了一个非常简单的协议(protocol)来为特定的ViewController类添加刷新功能,如下所示:@objc

快速不一致的通用协议(protocol)限制

在将参数传递给具有协议(protocol)限制的通用函数时,我似乎遇到了编译器不一致的问题。我可以传递一个具体的参数,但不能传递一个作为协议(protocol)类型的参数protocolSelectable{funcselect()}protocolLog:Selectable{funcwrite()}classDefaultLog:Log{funcselect(){print("selecting")}funcwrite(){print("writing")}}letconcrete=DefaultLog()letproto:Log=DefaultLog()funcmyfunc(ar