如何在iOS中公开方法时编组nativescript中的指针类型?

时间:2016-07-27 19:02:20

标签: ios nativescript

我需要公开我在扩展的对象中实现的KVO方法:

- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary<NSString *,
                                    id> *)change
                   context:(void *)context

为此,我需要为extends填写公开的方法参数。 如何指定数据类型NSString *,void *和NSDictionary *,因为仅使用NSString,interop.types.void和NSDictionary似乎没有帮助。

1 个答案:

答案 0 :(得分:0)

对于(NSString *),只需将该方法传递给普通的JavaScript字符串,它就会自动编组为NSString。

对于(void *),我希望你能够传递interop.Reference的任何实例。

对于(NSDictionary *),您需要在JavaScript中实例化NSDictionary并将其传递给该函数。

以下是一个例子来说明:

let myObject = NSObject.alloc().init();
let dictionary = NSDictionary.alloc.init();

// For this example, let's pretend that the context can be a buffer of arbitrary length.
let length = 4,
    buffer = interop.alloc(length),
    bufferReference = new interop.Reference(interop.types.uint8, buffer);

 observeValueForKeyPathOfObjectChangeContext('my path', myObject, dictionary, bufferReference);

您的方法签名为字典指定了一个轻量级泛型类型,尽管我听说Objective-C运行时并没有真正强制执行它,而且它只是在预编译器中强制执行。

如果您发现此设置不适合您,您可以在Objective-C中为您的类实现包装器或辅助函数,以帮助简化编组。