Ios 在目标C中调用typedef“;id";来自斯威夫特
我正在尝试将代码从Objective-c更改为Swift 连接。h: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
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,所以一切都有点奇怪(: