草庐IT

objc_setProperty_atomic_copy

全部标签

objective-c - Throwing 方法不能是@objc 协议(protocol)的成员,因为它返回类型为 'Bool' 的值

我收到以下错误:Throwingmethodcannotbeamemberofan@objcprotocolbecauseitreturnsavalueoftype'Bool';return'Void'oratypethatbridgestoanObjective-Cclass定义Swift协议(protocol)时也需要桥接到Objective-C:@objcpublicprotocolSaving{funcsave()throws->Bool}是否有其他方法可以定义返回Bool的Swift方法,可能会抛出错误并与Objetive-C兼容? 最佳答案

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,因此在以编程方式创建按钮时没有必

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.

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

ios - 如何使用消息 "outlined copy of Optional"调试崩溃?

我有一个Swift4应用程序,突然间我开始收到许多崩溃记录消息outlinedcopyofAccount?。堆栈跟踪中引用了几个不同的文件,但最常发生在应用程序的入口点。我无法重现错误。每次崩溃都发生在iOS10.3.3中,Apple无法下载模拟器。除了一个以“我忘记了如何修复此问题”结尾的Twitter线程外,我也找不到任何提及此错误消息的信息。有没有人看到这个并且能够修复它?这是一些堆栈跟踪。对于上下文,Requestable是一个枚举,在tableView(_:cellForRowAt:)代码中引用了一个实例,而Account是一个结构也在那里引用。根据一些用户的说法,他们到达此

ios - Swift 3.0 使用 write(toFile : atomically:) 写入二进制图像数据

我正在学习教程Project10并尝试将其转换为Swift3.0。使用UIImagePickerController选择图像然后将其保存到DocumentsDirectory是通常最简单的情况。我在这一行遇到错误:jpegData.write(toFile:imagePath,atomically:true)生命是这样开始的:jpegData.writeToFile(imagePath,atomically:true)错误想要将我的参数替换为:jpegData.write(to:imagePath,options:true)我很确定这不是我想要的,而且它会导致进一步的字符串/URL错误

objective-c - 转义闭包是如何在 Swift 3 中实现的(底层)?它们是否像在 objective-c 中那样隐式地 block_copied/retained?

我想了解转义闭包在Swift3中是如何工作的?来自Objective-C世界,对于闭包可以逃避其封闭函数返回的场景,您必须按照以下思路做一些事情:@property(nonatomic,copy/strong)void(^callback)(NSData*rawData);-(BOOL)someFunctionThatConsumesABlock:(void(^)(NSData*rawData))block{if(callback){self.callback=block;returnYES;}returnNO;}-(void)someFunctionThatExecutesAtSom

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

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