簡體   English   中英

將Python類傳播到Objective-C

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM