[英]Proxing Python class to Objective-C
我嘗試將現有的Python類代理到Objective-C。 我從簡單的Python類示例開始:
測試文件
class Test:
def __init__(self):
self.text = ""
def addText(self, _text):
self.text = self.text + _text
def addSomeText(self):
self.addText("SomeText")
然后我為此編寫了Objective-C類。
ITest.h
#import <Cocoa/Cocoa.h>
@interface ITest : NSObject
- (void) addText: (NSString *)text;
- (void) addSomeText;
+ newTest;
@property (nonatomic, assign, getter = _text) NSString *text;
@end
ITest.m
#import "ITest.h"
#define ABSTRACT { return nil; }
#define ABSTRACT_VOID { }
@implementation ITest
@dynamic text;
- (void) addText: (NSString *)text ABSTRACT_VOID;
- (void) addSomeText ABSTRACT_VOID;
+ newTest {
return [[NSClassFromString(@"TestProxy") new] autorelease];
}
@end
我的代理類(在一些有關PyObjC的文章之后,我將Objective-C類子類化,並且將原始類子類化以訪問其實例變量):
TestProxy.py
import Foundation
import objc
from Test import Test
ITest = objc.lookUpClass("ITest")
class TestProxy (ITest, Test):
# getters/setters
def setText_(self, _text):
self.text = _text
def _text(self):
return self.text
# methods
def addText_(self, text):
Test.addText(self, text)
def addSomeText(self):
Test.addSomeText(self)
現在,如果我這樣做
ITest *test = [ITest newTest];
我總是nil
,在調試控制台沒有警告或錯誤。
如果刪除所有導入和對原始Test
類的引用,則將獲得工作對象。 我注意到, from Test import Test
添加后from Test import Test
將立即返回nil
。
我認為這是因為PyObjC試圖橋接Test
類而失敗,因為PyObjC的方法不符合橋接命名規則。
有沒有辦法說PyObjC不這樣做? 或者,也許我所做的所有事情都是錯誤的,並且有更好的方法將現有的Python內容轉換為Objective-C?
我只想確保您故意編寫了沒有返回類型的newText方法。.objective-c方法最有可能具有其返回類型,並且如果您不想讓特定類型返回,請使用關鍵字“ id”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.