草庐IT

UIApplicationDelegate_Protocol

全部标签

Swift:不能将协议(protocol)与泛型混合

假设我有以下代码:protocolA{}structB:A{}funcb()->A{returnB()}funcf(t:T)->T{returnt}f(b())这会导致以下错误(Xcode6.3beta3):Playgroundexecutionfailed:Test.playground:12:1:error:genericparameter'T'cannotbeboundtonon-@objcprotocoltype'A'f(b())^Test.playground:8:6:note:incalltofunction'f'funcf(t:T)->T{^我觉得这是在Swift中实现泛

swift - 在 Swift 中,Objective-C 类的属性是否有可能满足 Swift @obj 协议(protocol)计算属性要求?

例如,我想从现有的Objective-C类MyFoo中提取Swift协议(protocol)。我们称此协议(protocol)为FooProtocol。情况是这样的://InObjective-C@interfaceMyFoo@property(nonatomic,copy)NSString*foo;@end@implementationMyFoo//...-(instancetype)initWithString:isimplementedhere@end//InSwift@objcprotocolFooProtocol{varfoo:String{getset}}extension

swift - 声明框架中结构的简单协议(protocol)一致性

是否可以声明在框架中定义的结构简单地符合在我的应用程序中定义的协议(protocol)?举例来说,我有一个API可以为框架中建模的几个小部件声明结构:publicstructVagueWidget{publiclettemperature:Float}publicstructSpecificWidget{publicletcalibratedTemperature:FloatpublicletmovingAverageTemperature:Float}publicstructSuperSpecificWidget{publicletsurfaceTemperature:Floatpu

swift - 为什么在 Swift 中对泛型协议(protocol)的元组进行类型别名允许我将其视为非泛型协议(protocol)?

我无法理解为什么对通用协议(protocol)的元组进行类型别名突然允许我将其视为非通用协议(protocol)。由于Swift泛型的工作方式,我们预计会在示例1、3、4和5中遇到错误。但是为什么示例2可以工作?它与示例3在语义上有何不同?示例1:正如预期的那样,这不会编译:letfoo:Hashable="a"//error:protocol'Hashable'canonlybeusedasagenericconstraintbecauseithasSelforassociatedtyperequirements因为Hashable继承了Equatable的Self要求。示例2:但是

swift - 使用通用函数模拟协议(protocol)

所以我有以下Swift协议(protocol)...protocolMyMessage{funcencodeMessage()->[String:AnyObject]}protocolSender{funcsend(id:Int,event:T)}而且我在我编写的一些代码中使用它们很好。现在我想编写一些单元测试并模拟Sender协议(protocol)。基本上我想捕获id和事件,以便我可以在单元测试中检查它们,在单元测试中我将Sender传递给被测类。所以我开始编写模拟程序,在我意识到它行不通之前我已经走到这一步了。classMockSender:Sender{varsentEvent

对包含可选的任何值进行 Swift 3 协议(protocol)转换

这里有一些奇怪的行为,我有一个Any类型的值,我希望打开它的协议(protocol)一致性,当值的real类型是可选的时,它不起作用:letsomething:Int?=42switchsomething{caseletxasEquatable:print("Yeepee!Theansweris\(x)")//Here'swhatismatcheddefault:print("Boohoo!")}letanything:Any=something//anythingcontainsaInt?valueswitchanything{caseletxasEquatable:print("Y

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,因为通常可以在