gpt4 book ai didi

ios - 从 swift 调用 Objective-C "id"中的 typedef

转载 作者:行者123 更新时间:2023-11-28 13:19:35 24 4
gpt4 key购买 nike

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

connection.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:

fun callFun()
{
var status = objInst.getData(“1”, withCallback: updateData, withContext: self)
}


func updateData(contextObject:id, data:NSArray, done:CBool, error:Int) -> CBool {

}

我收到以下错误。


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)


已更新:

我确实将“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)

关于我出错或遗漏其他内容的任何想法?

谢谢!

最佳答案

编译器已经告诉你问题出在哪里。 objective 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​​ 有什么原因吗?如果不是,那么最好使用 BoolCBool​​ 只是 Bool 的类型别名,但在我看来它降低了代码的可读性。

推荐阅读:id Compatibility

关于ios - 从 swift 调用 Objective-C "id"中的 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27014456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com