如何在PyObj中使用respondsToSelector和performSelector

2024-09-20 23:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将Objective-C程序转换为PyObjC,但这两方面都缺乏经验。在

这是目标C部分

WebPreferences *p = [webview preferences];
if([p respondsToSelector:@selector(setWebGLEnabled:)]){
[p performSelector:@selector(setWebGLEnabled:) withObject:[NSNumber numberWithBool:YES]];
}

这基本上是一个未记录的方法(是的,我知道我不能提交到appstore)在WebView中启用WebGL

我不知道怎么把这部分翻译成PyObjC


Tags: 目标ifpyobjcselectorpreferencesobjectivewebview缺乏经验
2条回答

这座桥的神奇之处之一。您只需使用选择器的字符串方法名(使用冒号,而不是下划线):

>>> from AppKit import *
>>> s = NSString.stringWithString_("Lemon curry?")
>>> s.respondsToSelector_("length")
True
>>> s.respondsToSelector_("count")
False
>>> s.respondsToSelector_("writeToFile:atomically:encoding:error:")
True
>>> s.performSelector_("lowercaseString")
u'lemon curry?'

您不必使用performSelector,只需调用方法:

p = webview.preferences()
p.setWebGLEnabled_(True)

这是因为PyObjC不查看头文件,而是在Objective-C运行时查找存在的方法。在

相关问题 更多 >

    热门问题