草庐IT

objc-protocol

全部标签

swift - 为什么我可以将 @objc 协议(protocol)声明为弱属性,而不是 swift 协议(protocol)?

我发现如果我创建一个这样的协议(protocol):protocolMyProtocol{}我不能这样做:weakvarmyVar:MyProtocol?我找到了解决这个问题的方法,就是将@objc添加到协议(protocol)声明中:@objcprotocolMyProtocol{}但是为什么这样可以修复错误呢?我的猜测是添加@objc会阻止结构符合协议(protocol),因此变量的值被保证为引用类型。我说得对吗?此外,添加@objc会阻止我添加像[String:Any]这样的swift类型。我也想知道是否有另一种修复错误的方法。 最佳答案

swift - 非最终类无法满足协议(protocol)要求,因为它在非参数、非结果类型中使用 'Self'

这个问题在这里已经有了答案:ASwiftprotocolrequirementthatcanonlybesatisfiedbyusingafinalclass(4个答案)关闭6年前。我想用一个类方法实现一个协议(protocol),该类方法将实现类的数组作为参数。例如这样的事情:protocolMyProtocol{staticfuncfoo(verticies:[Self])->Int}classMyClass:MyProtocol{classfuncfoo(verticies:[MyClass])->Int{return42}}当我尝试这样做时,出现以下错误:Protocol'My

swift - 为什么我的 Swift 协议(protocol)扩展不能包装相同类型的现有函数?

我正在尝试为一个集合创建一个“安全”的下标运算符——一个忽略超出集合可用索引范围的部分的运算符。期望的行为是在所有情况下都返回一个Slice;当下标范围与集合范围不重叠时,应返回空数组。这似乎是对thisanswer中介绍的技术的直接扩展.documentationofthecollectionsubscriptoperatorisverystraightforward:subscript(bounds:Range)->Slice{get}但是当我在我的包装函数中采用这些相同的类型时,我得到以下信息:复制/粘贴版本:extensionCollectionwhereIndices.Ite

swift - CustomNSError 协议(protocol)有什么作用,我为什么要采用它?

CustomNSError协议(protocol)有什么作用,我为什么要采用它?Apple提供的文档仅说明:Describesanerrortypethatspecificallyprovidesadomain,code,anduser-infodictionary.我已经在谷歌上搜索过,但在那里找不到与我的问题相关的任何内容。 最佳答案 EverytypethatconformstotheErrorprotocolisimplicitlybridgedtoNSError.ThishasbeenthecasesinceSwift2,

objective-c - 从 Objective-C 协议(protocol)实例匹配 Swift 协议(protocol)

我正在寻找一种方法来动态匹配Objective-CProtocol实例与相应的Swift协议(protocol)。我在swift中定义了一个与Objective-C兼容的协议(protocol):@objc(YHMyProtocol)protocolMyProtocol{}我尝试在函数中执行匹配:publicfuncexistMatch(_meta:Protocol)->Bool{//NotworkingifmetaisMyProtocol{returntrue}//NotworkingalsoifmetaisMyProtocol.Protocol{returntrue}returnf

ios - 协议(protocol)实现协议(protocol)的默认实现

我正在尝试创建一个将由某些类实现的协议(protocol),所有这些类也应该实现UIScrollViewDelegate。我想到的是让我的新协议(protocol)实现协议(protocol)UIScrollViewDelegate。protocolMyProtocol:UIScrollViewDelegate{varmyVar:NSString{get}funcmyMethod()}由于该协议(protocol)应该有其默认实现,我还为此协议(protocol)创建了一个扩展。extensionMyProtocol{funcmyMethod(){print("I'mprinting"

属性符合协议(protocol)的 Swift 协议(protocol)扩展

我这样声明了一个协议(protocol)protocolJSONConnection{varrequest:NSURLRequest{getset}varsession:NSURLSession{getset}varjsonRootObject:JSONSerializable?{getset}}这里的JSONSerializable不是实际类型,它是我声明的另一个协议(protocol):protocolJSONSerializable{funcreadFromJSON(json:JSON)throws}所以,事实上,这个JSONConnection协议(protocol)需要一个名

ios - 检查可选的多参数委托(delegate)方法

Swift新手。如果(a)设置了委托(delegate)并且(b)实现了方法,则努力寻找最简洁/惯用的语法来调用可选的委托(delegate)方法。我知道?可以扮演这个角色(例如self.delegate.foo?()),但我在尝试调用ObjC时无法获得正确的语法具有多个参数并返回一个我关心捕获的值(Bool)的委托(delegate)方法(我想区分“未实现的方法”和“已实现并返回false的方法”)。这是一个例子。在这种情况下,MyDelegateProtocol有一个可选方法-myThing:argTwo:argThree:(返回Bool)。这段代码似乎语义正确,但它使用了resp

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()}