【问题标题】:Call variadic Objective-C function from Swift从 Swift 调用可变参数 Objective-C 函数
【发布时间】:2014-06-23 19:47:09
【问题描述】:

我已经总结了问题的步骤,我在Objective-C中定义了一个C函数:

ObjC.h

#import <Foundation/Foundation.h>

void cuslog(NSString *format, ...);

@interface ObjC : NSObject

@end

ObjC.m

#import "ObjC.h"

@implementation ObjC

@end

void cuslog(NSString *format, ...)
{
     // Implementation
}

我在 Bridging-Header.h 中暴露了它:

#import "ObjC.h"

// Also tried to put this line in bridging header
void cuslog(NSString *format, ...);

在 Swift 中我打算这样调用函数:

cuslog("Some log")

但是错误提示:

"Use of unresolved identifier 'cuslog'"

在 Swift 中调用函数的正确方法是什么?

【问题讨论】:

标签: objective-c c swift


【解决方案1】:

根据 Swift 开发人员C variadic functions are not compatible with Swift variadics,因此您将无法直接调用您的函数。

目前唯一的解决方法是用 C 或 Obj-C 编写一个非可变包装器,然后从 Swift 中调用它。

【讨论】:

  • 另外,任何带有 C/Obj-C 可变参数函数的像样的 API 都应该有一个非可变参数版本,它接受一个 va_list 参数,或者一种逐个添加元素的方法。其中任何一个都可以从 Swift 中调用。
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 2014-08-03
  • 1970-01-01
  • 2022-12-11
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多