草庐IT

Protocols

全部标签

swift - 协议(protocol)只能用作通用约束

我有一个MapViewController用于在map上显示注释。它包含一个MapPresentable类型的对象。protocolMapPresentable{associatedtypeAnnotationElement:MKAnnotationvarannotations:[AnnotationElement]{get}}classMapViewController:UIViewController{varmapPresentable:M!}如果mapPresentable符合RoutePresentable协议(protocol),MapViewController也可以在ma

swift - 扩展协议(protocol)以实现不同的行为

Swift问题,比如说你有一个协议(protocol)Bark:protocolMakeSound{funcbark()}一个父类(superclass)Dog,实现了吠叫和游泳:classDog:MakeSound{}然后是不同类型的狗:classPoodle:Dog{}classGermanShephard:Dog{}classSheepDog:Dog{}但是Poodle会狂吠,它们不会吠叫……所有的狗都会吠叫,只是它们的叫法不同……我如何赋予它们特定的吠叫行为?扩展协议(protocol)?...extensionMakeSound{funcbark()funcyapper()}

ios - 迭代弱引用数组,其中对象符合 Swift 中的协议(protocol)

我想将对象存储在一个数组中,其中对象是弱的,并且符合一个协议(protocol)。但是当我尝试循环它时,出现编译器错误:publicclassWeak{publicweakvarvalue:T?publicinit(value:T){self.value=value}}publicprotocolClassWithReloadFRC:class{funcreloadFRC()}publicvarobjectWithReloadFRC=[Weak]()forowrfrcinobjectWithReloadFRC{//IfIcommentthislinehere,itwillabletoc

swift - 我怎么知道如何遵守 Swift 中的特定协议(protocol)?

当我声明一个我想要遵循协议(protocol)的类时,Swift会显示一条消息,告诉我在满足协议(protocol)的所有要求之前我不遵守该协议(protocol)。有没有办法让编译器为我提供更具体的细节,说明我缺少哪些要求或为什么我不符合该协议(protocol),或者我是否总是必须打开该协议(protocol)的源代码与我的类(class)并排源代码并进行手动眼球比较?澄清一下,我并没有特别询问任何特定的协议(protocol),事实上,我真的在寻求更好的支持来执行我自己的协议(protocol)。 最佳答案 IssueNavi

arrays - Swift 3 无法将符合协议(protocol)的对象数组附加到该协议(protocol)的集合

下面我粘贴了代码,您应该能够将其粘贴到Swift3playground中并查看错误。我定义了一个协议(protocol)并创建了一个该类型的空数组。然后我有一个符合协议(protocol)的类,我尝试将其附加到数组,但出现以下错误。protocolMyProtocol{vartext:String{get}}classMyClass:MyProtocol{vartext="Hello"}varcollection=[MyProtocol]()varmyClassCollection=[MyClass(),MyClass()]collection.append(myClassCollec

swift - Swift 协议(protocol)中的弱属性只能是类或类绑定(bind)协议(protocol)类型

我想定义一个在Viper架构中使用的协议(protocol),以使用具有弱属性的协议(protocol)在Viper组件之间建立连接,但我收到以下错误消息:'weak'mayonlybeappliedtoclassandclass-boundprotocoltypes,not'Self.ViperViewClass'protocolViperPresenter:class{associatedtypeViperViewClassweakvarview:ViperViewClass!{getset}} 最佳答案 协议(protocol

swift - 尝试快速将协议(protocol)添加到类签名

我正在尝试快速创建应用内购买。在我的类(class)签名中,我有以下内容:classViewController:UIViewController,UITextFieldDelegate,UIAlertViewDelegate,SKStoreProductViewControllerDelegate,SKPaymentTransactionObserver{但是,我收到一条错误消息:类型“ViewController”不符合协议(protocol):SKPaymentTransactionObserver我读过这个:https://developer.apple.com/library

ios - 类型 'x' 不符合协议(protocol) 'UIPickerViewDataSource'

importUIKitclassFourthViewController:UIViewController,UIPickerViewDelegate,UIPickerViewDataSource{@IBOutletweakvarpicker:UIPickerView!varpickerData:[String]=[String]()overridefuncviewDidLoad(){super.viewDidLoad()//Doanyadditionalsetupafterloadingtheview.self.picker.delegate=selfself.picker.dataS

objective-c - Swift 相当于 id<MyProtocol>?

问题在标题中。在Objective-C中,如果我想拥有一个HAS遵守特定协议(protocol)的属性(如委托(delegate)),可以这样定义它:@property(weak)iddelegate;我如何在Swift中执行此操作? 最佳答案 协议(protocol)是一种类型,因此您可以将其用作已声明的变量类型。要使用weak,您必须将类型包装为Optional。所以你会说:weakvardelegate:MyDelegate?但是为了让它工作,MyDelegate必须是一个@objc或class协议(protocol),以保证

swift - 如何编写协议(protocol)扩展以从 Swift 枚举中获取所有 rawValues

我想做的是创建一个协议(protocol)扩展来从枚举中获取一组原始值。例如说我有以下内容:enumTestType:String,EnumIteratable{caseunitTest="UnitTest"caseuiTest="UITest"}classEnumIterator:NSObject{classfunciterateEnum(_:T.Type)->AnyGenerator{vari=0returnanyGenerator{letnext=withUnsafePointer(&i){UnsafePointer($0).memory}returnnext.hashValue