草庐IT

L_OBJC_SELECTOR_REFERENCES

全部标签

objective-c - 如何从协议(protocol)方法描述列表中解密 "objc_method_description"?

我有一些Swift3代码来解码iOSObjective-C协议(protocol)(它有一个Swift对应协议(protocol))。在断定Swift3反射还不足以完成我需要的功能后,我偶然发现了objc运行时方法protocol_copyMethodDescriptionList(),它返回以下C结构的数组:structobjc_method_descriptionSELname;char*types;};代码获取协议(protocol)选择器名称列表,但不确定type字段中返回的是什么。我对如何正确解码objc_method_description.type值感到困惑。我在type

swift - 以编程方式创建 UIButton 事件时,@objc 和 IBAction 之间有什么区别吗?

当从Storyboard中的UIButton创建事件处理程序时,Swift在func之前添加了@IBAction。当以编程方式将事件添加到UIButton到func时,Swift报错并说我需要在我的方法前面添加@objc,但是当我添加@IBAction时,它也会编译。将事件添加到我的UIButton以编程方式时,两者之间有区别吗?我应该使用哪个? 最佳答案 IBAction前缀已经将方法公开给Objective-C运行时,因此无需再为它添加前缀@objc。由于IB代表InterfaceBuilder,因此在以编程方式创建按钮时没有必

ios - 为什么我的 segue 导致 "unrecognized selector sent to instance"NSInvalidArgumentException?

尝试使用segue从我的第一个ViewController移动到我的第二个ViewController(都使用相同的Storyboard)。我的第一个ViewController有两个按钮,一个表示“男性”,一个表示“女性”(我知道,不是每个人都与这两个中的一个相关联),我希望其中一个按钮在单击后移动到第二个ViewController。我将按钮拖/放到我的代码中以获得以下内容:@IBActionfuncfemaleButton(_sender:AnyObject){Globals.onboardingList.append("girl")print("it'sagirl!")perf

swift - 为什么在 Swift 中通过 Selector 调用时不考虑函数的默认参数?

通过选择器调用的方法不遵循默认参数值。示例如果我连接了一个按钮来通过选择器调用函数:funcsetupButton(){self.button.addTarget(self,action:#selector(printValue),for:.touchUpInside)}@objcfuncprintValue(value:Int=7){ifvalue==7{print("receiveddefault")}else{print("defaultunused")}}当通过代码调用此方法时"receiveddefault"被打印出来,但是当我按下按钮并通过选择器调用方法时"defaultu

ios - 为什么delegate.respondsToSelector(Selector ("testEnum:"))这段代码用swift语言会返回false?

我前几天是从Objective-C开始写Swift语言的,在项目中我遇到了一个问题。这个问题是在使用respondsToSelector("testEnum:")函数检查是否实现了testEnum的功能时:,如果param是这样,会返回false,我试过其他类型,都会返回true,不知道是什么原因,看下面的代码,帮我解决一下,非常感谢!enumTestEnum{caseAcaseBcaseC}protocolTestAProtocol:NSObjectProtocol{functestEnum(testEnum:TestEnum);functestInt(testInt:Int);}c

objective-c - 以协议(protocol)为参数的 ObjC 泛型集合被翻译为 [AnyObject]

为什么protocols属性在swift中被翻译成[AnyObject],而不是[P]@protocolP;@classC;@interfaceTestGenerics:NSObject@propertyNSArray*classes;@propertyNSArray*protocols;@end在Swift中它看起来是这样的:publicclassTestGenerics:NSObject{publicvarclasses:[C]publicvarprotocols:[AnyObject]}更新:找到解决方案@propertyNSArray*>*protocols;或者喜欢建议的ne

ios - 如何快速将 void block 传递给 objc_setAssociatedObject

我正在尝试通过扩展向UIView添加点击手势支持。这使用Objective-C非常简单,但是当我尝试在运行时属性上设置void返回block时出现以下错误。error:type'()->Void'doesnotconformtoprotocol'AnyObject'这是计算属性:vartapAction:(()->Void)?{get{objc_getAssociatedObject(self,&AssociatedKeys.SNGLSActionHandlerTapBlockKey)}set{objc_setAssociatedObject(self,&AssociatedKeys.

timer - 调用中的额外参数 'selector' - NSTimer scheduledTimerWithTimeInterval

我有以下代码行:changeColour=NSTimer.scheduledTimerWithTimeInterval(TIMES,target:self,selector:"changeColourOfPage",repeats:true)但它给出错误“调用中的额外参数‘选择器’”当我将TIMES变量更改为类似1.0的数字时,它工作正常。变量TIMES设置为1.0。这只是一个小故障,还是我做错了什么?我需要用它来随机运行一个方法。请帮忙! 最佳答案 刚遇到同样的问题。对我来说,问题是我传递的时间间隔是Float而不是Double。

xcode - 使用@IBInspectable func 或 Selector 自定义 UIView

我正在使用Swift并学习@IBInspectable。我想知道是否可以创建一个允许其他View和viewController设置内部按钮操作的自定义View,因为ViewController将IBAction直接链接到它拥有的按钮。我可以在带有选择器类型的自定义View中创建一个@IBInspectable,但它对InterfaceBuilder中的其他类不可见。@IBInspectableprivatevartouchUpInside=NSSelectorFromString("didClickButton"){didSet{button.addTarget(self,action

ios - ld : SDK. 使用旧版本的 Swift 语言 (XX) 编译的框架比以前的 ObjC 框架文件(未知 ABI 版本 YYY)

简介我正在处理SDK.framework,我需要将其作为闭源软件进行分发。为了涵盖objective-c和swift项目,我决定在objective-c上编写它在本地环境中我有两个项目:SDK(框架源代码)DemoApp(链接到SDK.framework的应用)*这些项目在单独的工作空间中问题当我在本地编译SDK.framework时,它运行完美。一旦我从CI获得一个(它有不同的iOSSDK版本)并尝试将它与DemoApp链接我得到这个错误:ld:SDK.frameworkcompiledwitholderversionofSwiftlanguage(4.0)thanpreviousf