Ios 在目标C中调用typedef“;id";来自斯威夫特

Ios 在目标C中调用typedef“;id";来自斯威夫特,ios,objective-c,swift,Ios,Objective C,Swift,我正在尝试将代码从Objective-c更改为Swift 连接。h: typedef BOOL (*data_function)(id contextObject, NSArray* data, Boolean done, int error); -(int)getData:(NSString)dataType withCallback:(data_function)processFunc withContext:(id)context; 下面是Objective-c程序。 ViewCont

我正在尝试将代码从Objective-c更改为Swift

连接。h:

typedef BOOL (*data_function)(id contextObject, NSArray* data, Boolean done, int error);

-(int)getData:(NSString)dataType withCallback:(data_function)processFunc withContext:(id)context;
下面是Objective-c程序。 ViewController.m

-(void) callFun
{

int status = [objInstance getData:”1” withCallback:updateData withContext:self];

}

static BOOL updateData(id contextObject, NSArray* data, Boolean done, int error)
{

}
对于上述内容,我尝试使用Swift进行转换,如下所示:

ViewController.swift:

typedef BOOL (*data_function)(id contextObject, NSArray* data, Boolean done, int error);

-(int)getData:(NSString)dataType withCallback:(data_function)processFunc withContext:(id)context;
我得到了下面的错误

—
error: use of undeclared type 'id'; did you mean to use 'AnyObject'?
    func updateData(contextObject:id, data:NSArray, done:CBool, error:Int) -> CBool {
                                       ^~
                                       AnyObject
/xxx/ViewController.swift:149:78: error: 'ViewController' does not have a member named 'updateData'
        var status = objInst.getData(“1”, withCallback: updateData, withContext: self)

—
更新:

typedef BOOL (*data_function)(id contextObject, NSArray* data, Boolean done, int error);

-(int)getData:(NSString)dataType withCallback:(data_function)processFunc withContext:(id)context;
我确实将“id”改为“AnyObject”,但显示了不同的错误

—
error: '(AnyObject, data: NSArray, done: Bool, error: Int) -> Bool' is not convertible to 'data_function’
        var status = objInst.readData(“1”, withCallback: updateData, withContext: self)
—
你知道我为什么会出错或错过什么吗


谢谢

是的,与
id
等价的Swift关键字是
AnyObject
,正如错误消息和有用的注释所示。

编译器已经告诉您问题所在。目标C中的
id
类型在swift中映射为
AnyObject
,表示任何参考类型。因此,您的函数应该如下所示:

func updateData(contextObject: AnyObject, data:NSArray, done:CBool, error:Int) -> CBool
注意:如果
contextObject
可以是
nil
,则应使用可选的:

func updateData(contextObject: AnyObject?, data:NSArray, done:CBool, error:Int) -> CBool
另外,您使用
CBool
还有什么原因吗?如果没有,那么最好使用
Bool
CBool
只是
Bool
的一个类型别名,但在我看来,它会降低代码的可读性


建议阅读:

答案不就在信息中吗<代码>id在Swift中不存在,您是否打算使用
任何对象
?@jrturton:我更新了这个问题。您的Swift数据函数定义在哪里?@jrturton:func updateData()…我在Swift部分中指定了。。是外部API。我最多可以访问头文件…谢谢,m8!今天开始使用Swift,所以一切都有点奇怪(: