草庐IT

SMB1Protocol

全部标签

swift - ObjC 协议(protocol)的协议(protocol)扩展

我有一个Objective-C协议(protocol),主要由Objective-C对象和一两个Swift对象使用。我想在Swift中扩展协议(protocol)并添加2个函数。一个用于注册通知,另一个用于处理通知。如果我添加这些funcregisterForPresetLoadedNotification(){NSNotificationCenter.defaultCenter().addObserver(selfasAnyObject,selector:#selector(presetLoaded(_:)),name:kPresetLoadedNotificationName,ob

swift - 使用泛型和协议(protocol)作为类型参数的区别,在函数中实现它们的优缺点是什么

由于Swift允许我们在函数中同时使用Protocol和Generic作为参数类型,因此我想到了以下场景:protocolAProtocol{varname:String{get}}classClassA:AProtocol{varname="Allen"}funcprintNameGeneric(param:T){print(param.name)}funcprintNameProtocol(param:AProtocol){print(param.name)}第一个函数使用泛型作为带有类型约束的参数类型,第二个函数直接使用协议(protocol)作为参数类型。但是,这两个函数竟然可

ios - 符合静态方法协议(protocol)的纯 Swift 类 - 向上转换问题

假设我们有一个带有一个static方法的Swift协议(protocol):protocolCreatable:class{staticfunccreate()->AnyObject}和一个符合协议(protocol)的纯Swift类:classFoo:Creatable{staticfunccreate()->AnyObject{returnFoo()asAnyObject}}稍后,当有人试图通过操作Creatable类型来使用该协议(protocol)时,例如:varf:Creatable=Foo.selff.create()编译器提示如下:error:type'Foo.Type'

swift - 如何在类层次结构中正确实现 Equatable 协议(protocol)?

我正在尝试在Swift3的基类及其子类中实现==运算符(来自Equatable)。所有的类都将只被使用在Swift中,所以我不想涉及NSObject或NSCopying协议(protocol)。我从一个基类和一个子类开始:classBase{varx:Int}classSubclass:Base{vary:String}现在我想将Equatable和==运算符添加到Base。看起来很简单。从文档中复制==运算符签名:classBase:Equatable{varx:Intstaticfunc==(lhs:Base,rhs:Base)->Bool{returnlhs.x==rhs.x}}

ios - 错误域=NSPOSIXErrorDomain 代码=100 "Protocol error"

我正在尝试使用.get方法调用使用Alamofire的服务。该请求没有什么特别的,没有参数,只有一个授权header。我在这里有点生气,因为当我使用相同的URL和授权token在postman上运行它时请求工作正常,但是当我使用Alamofire运行我的应用程序代码时它返回此错误:ErrorDomain=NSPOSIXErrorDomainCode=100"Protocolerror"UserInfo={NSErrorPeerAddressKey={length=16,capacity=16,bytes=0x100201bbd83ad0b10000000000000000},_kCFS

swift - 强制转换,即使协议(protocol)需要给定类型

我有以下代码:importUIKitprotocolFooable:classwhereSelf:UIViewController{funcfoo()}classSampleViewController:UIViewController,Fooable{funcfoo(){print("foo")}}letvc1:Fooable=SampleViewController()letvc2:Fooable=SampleViewController()//vc1.show(vc2,sender:nil)-error:Valueoftype'Fooable'hasnomember'show'/

swift - 为什么具有协议(protocol)一致性的扩展不能具有特定的访问级别?

假设我们有以下示例代码:protocolMyProtocol{funcsomeFunction()}publicclassMyClass{}publicextensionMyClass:MyProtocol{funcsomeFunction(){print("hello")}}编译上面的代码会出现以下错误:Error:'public'modifiercannotbeusedwithextensionsthatdeclareprotocolconformances如果我将扩展标记为private,也会发生同样的事情。似乎您无法设置符合协议(protocol)的扩展的访问级别,无论访问级别

ios - init 的 Swift 协议(protocol)扩展自引用问题

我正在寻找一种通过协议(protocol)扩展向协议(protocol)添加默认初始化器的方法。我的协议(protocol)是:protocolTestProtocol{varmyVar:Double{getset}init(value:Double)init(existingStruct:TestProtocol)}我已经使用这个协议(protocol)实现了一个结构:structTestStruct:TestProtocol{varmyVar:Doubleinit(value:Double){myVar=value}init(existingStruct:TestProtocol)

swift - 自身,协议(protocol)扩展和非最终类

我尝试为UIView编写一个静态方法,该方法从笔尖实例化该类的View。方法应该是通用的,并且适用于每个UIView子类。我也想保存类型信息–例如,在此代码中letmyView=MyView.loadFromNib()编译器推断myView具有MyView类。经过几次试验后,我决定使用协议(protocol)扩展,因为否则我将无法访问方法体内的Self。看起来这应该工作:protocolNibLoadable{staticfuncloadFromNib(name:String?)->Self}extensionNibLoadablewhereSelf:UIView{staticfunc

ios - 符合协议(protocol)的 Swift 扩展

我无法在Swift中创建符合协议(protocol)的扩展。在Objective-C中,我可以创建一个符合协议(protocol)的类别:SomeProtocol.h@protocolSomeProtocol...@endUIView+CategoryName#importSomeProtocol.h@interfaceUIView(CategoryName)...@end我正在尝试使用Swift扩展实现相同的目的SomeProtocol.swiftprotocolSomeProtocol{...}UIView扩展importUIKitextensionUIView:SomeProto