当前位置: 首页 > 面试题库 >

从Objective-C调用Python

高兴贤
2023-03-14
问题内容

我正在开发Python / ObjC应用程序,需要从ObjC的Python类中调用一些方法。我已经尝试了几种方法,但都没有成功。

  • 如何从Objective-C调用Python方法?
  • 我的Python类正在Interface Builder中实例化。如何从该实例调用方法?

问题答案:

使用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]: ?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"];


 类似资料:
  • 问题内容: 我无法从Objective-C访问Swift Singleton。 swiftSharedInstance无法访问。 问题答案: 现在,我有以下解决方案。也许我忽略了一些使我能够直接访问“ swiftSharedInstance”的东西? 然后在ObjC中,我可以获取sharedInstance类方法(在导入xcode生成的swift标头绑定之后)

  • 问题内容: 我有一个旧的Objective-C项目,我想调用新的Swift函数和对象,我已经创建了文件“ ”和“ ” 对我来说,从Swift调用函数到Objective-C很容易,但是我有一个反向问题。 因此,我创建了一个简单的类“ System.Swift” 现在我尝试按照此处和文件内的文档进行操作 并且已将其导入到Objective-C类中。此时,在我的Objective-C代码的Object

  • 问题内容: 我想使用Cocoa + Objective C创建本机Mac OS X应用程序,但我需要连接到专有数据源,为此,数据源的所有者仅提供Java库。因此,我需要以某种方式将该Java库导入我的项目中,并在其Java类上调用函数(或者在该库周围创建Java包装器,然后从Objective- C调用我的包装器)。 现在,我该怎么做?快速的Google搜索将我引向JNI,但是我没有找到任何好的和

  • 本文向大家介绍Swift调用Objective-C代码,包括了Swift调用Objective-C代码的使用技巧和注意事项,需要的朋友参考一下 最近iOS开发之新编程语言Swift在iOS开发圈内反响比较大,国内外都有很多教程或小示例。 虽然Swift这门语言仍然在不断的进化之中,而且变动还是比较大,苹果公司也不承诺目前所写代码会在将来兼容,但仍挡不住iOS开发者的热情。 为什么要使用Swift调

  • 本文向大家介绍Objective-C语言调用方式,包括了Objective-C语言调用方式的使用技巧和注意事项,需要的朋友参考一下 示例 调用实例方法: 在当前实例上调用实例方法: 调用一个带有参数的方法: 调用类方法:            

  • 问题内容: 构建与C或C ++库的Python绑定的最快方法是什么? (如果这很重要,我正在使用Windows。) 问题答案: Boost Python库是用于连接Python和C 的框架。它使您可以快速而无缝地将C 类的函数和对象暴露给Python,反之亦然,而无需使用特殊工具-仅使用C 编译器即可。它被设计为以非介入方式包装C 接口,因此您不必为了包装而完全更改C ++代码,从而使Boost.