- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 ObjC 中我有:
NSMethodSignature *ms = [[object.target class] instanceMethodSignatureForSelector:object.selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:ms];
在 Swift 中我得到错误:
'NSObject' does not have a member named 'instanceMethodSignatureForSelector'
当我尝试这样做时:
var ms:NSMethodSignature? = (object.target.dynamicType as NSObject).instanceMethodSignatureForSelector(object.success)
最佳答案
Swift 中没有调用。但也许你从来不需要在这里调用:
NSMethodSignature *ms =
[[object.target class] instanceMethodSignatureForSelector:object.selector];
因此,在某个时候,您使用target
和selector
形成或访问了一个对象(object
)。这表明您当时可以形成一个闭包,在该闭包中您可以在该目标上调用该方法。例如:
let clos = {() -> () in object.someMethod(); return; }
现在您有一个() -> ()
类型的值clos
,您可以存储、传递等等。到时候,你就叫它:
clos()
或者,根据情况,您可以直接存储对该方法的引用:
let funcref = object.someMethod
同样,您可以稍后调用它:
funcref()
既然我们拥有作为一等语言公民的闭包和函数,那么在许多情况下,Objective-C 的活力将变成不再需要的拐杖。
如果你发现你真的、真的需要它,Objective-C 并没有消失,你可以将它混合到你的项目中。
关于objective-c - Swift 中的 NSMethodSignature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158859/
我最近开始为 IOS 开发并与调用对象作斗争。 我有一个类“Location”,派生自 NSManagedObject(它是 Coredata 模型的一部分) @interface Location
在 ObjC 中我有: NSMethodSignature *ms = [[object.target class] instanceMethodSignatureForSelector:object
我正在使用此方法将方法分派(dispatch)给委托(delegate),不幸的是,我发现大多数时候 NSMethodSignature 为 nil,这是因为选择器来自协议(protocol)。我想知
我需要一种方法来在运行时检查给定 block 的参数数量和参数类型(我目前正在编写的某些对象映射库需要这个,我正在将字符串格式的值映射到选择器,想要相同的 block )。 我尝试了以下示例中的代码,
我在使用 [NSMethodSignature getArgumentTypeAtIndex] 函数时遇到了非常奇怪的行为。它返回 BOOL 类型的“@”字符,根据 objective-c type
我正在尝试在协议(protocol)方法中获取 block 的签名。 这是一个示例协议(protocol): @protocol ProtocolSample - (void) doSomethin
我如何在 swift 2 中编写这个类? NSMethodSignature 和 NSInvocation 在 swift 2 中不再存在 @implementation MyAuth - (void
在苹果的 documentation这个方法的最后说了以下内容: 特殊注意事项 此方法自 Mac OS X v10.0 起可用,在 Mac OS X v10.5 中公开。仅支持应用程序运行所针对的运行
我在手机上运行以下代码,其中“对象”是猫,它是动物的子类。动物有一个属性“颜色”: NSLog(@"Object: %@", object); NSLog(@"Color: %@", [object
我是一名优秀的程序员,十分优秀!