我正在實施一個ObjC協議作爲PyObjC類的混合。PyObjC和返回'出'參數(即NSError **)
該協議定義了「out」參數。
我無法找到任何有關如何實現ObjC協議定義這個行爲的Python類的好文檔。
我找到了這個mailing list thread,但在那裏的建議不起作用。他們說要返回一個Python列表,並將方法的返回值作爲第一項,將out參數作爲第二項。
我試過這個,所有我從ObjC(<type 'exceptions.ValueError'>: depythonifying 'char', got 'tuple'
)調用時是一個例外。
看來PyObjC在depythonifying方法參數時嚴格遵守ObjC協議,這很好,但它並不幫助我試圖修改out參數。
這是ObjC協議:
#import <Foundation/Foundation.h>
@protocol TestProtocol <NSObject>
- (BOOL)testMethod:(NSError **)error;
@end
這是Python類實現此協議:
from Foundation import *
import objc
NSObject = objc.lookUpClass("NSObject")
TestProtocol = objc.protocolNamed("TestProtocol")
class TestClass(NSObject, TestProtocol):
def testMethod_(self, error):
return True, None
問題:我如何返回一個Python ObjC out參數?
「PyObjC通常會將錯誤作爲元組的第二個元素傳回。」 是的,這就是我的Python方法(testMethod_)正在做的。但是PyObjC在退回ObjC土地時不遵守這條規則,隨後拋出異常。 我看到的互聯網上所有答案的混淆,似乎源於從Python調用ObjC與從ObjC調用Python之間的區別。 我對後者感興趣。 一個行爲不像另一個。 – firstresponder 2010-12-05 01:04:13