使用PyObjC。
它包含在Leopard及更高版本中。
>>> from Foundation import *>>> a = NSArray.arrayWithObjects_("a", "b", "c", None)>>> a( a, b, c)>>> a[1]'b'>>> a.objectAtIndex_(1)'b'>>> type(a)<objective-c class NSCFArray at 0x7fff708bc178>
它甚至可以与iPython一起使用:
In [1]: from Foundation import *In [2]: a = NSBundle.allframeworks()In [3]: ?aType: NSCFArraybase Class: <objective-c class NSCFArray at 0x1002adf40>
`
要从Objective-C调用Python,最简单的方法是:
在Objective-C中声明一个抽象超类,其中包含要调用的API
在类的@implementation中创建方法的存根实现
在Python中将该类子类化并提供具体的实现
在抽象超类上创建工厂方法,该方法创建具体的子类实例
即
@interface Abstract : NSObject- (unsigned int) foo: (NSString *) aBar;+ newConcrete;@end@implementation Abstract- (unsigned int) foo: (NSString *) aBar { return 42; }+ newConcrete { return [[NSClassFromString(@"MyConcrete") new] autorelease]; }@end.....class Concrete(Abstract): def foo_(self, s): return s.length().....x = [Abstract newFoo];[x foo: @"bar"];
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)