我正在开发一个
Python / ObjC应用程序,我需要在ObjC的Python类中调用一些方法.
我尝试了几件事没有成功.
我尝试了几件事没有成功.
>如何从Objective-C调用Python方法?
>我的Python类正在Interface Builder中实例化.如何从该实例调用方法?
解决方法
使用PyObjC.
它包含在Leopard& amp;后来.
>>> 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]: ?a Type: NSCFArray Base 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"];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。