gpt4 book ai didi

ios - 从 swift 调用 objective-C typedef block

转载 作者:搜寻专家 更新时间:2023-10-31 22:16:47 25 4
gpt4 key购买 nike

我正在尝试从 swift 中调用一个方法。该方法在用 objective-C 编写的单例中

头文件中的 block :

typedef void(^VPersonResultBlock)(Person *person, NSError *error);

- (void)askForMe:(VPersonResultBlock)block;

下面是该方法的实现。

- (void)askForMe:(VPersonResultBlock)block
{
if (_me) block(_me,nil);
else {
[Person getMeWithBlock:^(PFObject *person, NSError *error) {
if (!error) {
_me = (Person *)person;
block(_me,nil);
}

else if (error) {
block(nil,error);
}
else {
NSDictionary *userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Operation was unsuccessful.", nil),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The operation failed to retrieve the user.", nil),
NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Check your network connection and try again", nil)
};
NSError *error = [[NSError alloc] initWithDomain:@"VisesAsyncErrorDomain" code:-10 userInfo:userInfo];
block(nil,error);
}
}];
}
}

在 Objective-C 中,我可以调用它并且它会自动完成而不会混淆。

[[VDataStore instance] askForMe:^(Person *person, NSError *error) {
// do things with myself that aren't strange
}];

现在假设我想从 swift 调用相同的方法。桥接头已设置,并导入了头文件,但 swift 的期望令人困惑。

VDataStore.askForMe(VDataStore)

这是自动完成选项中显示的内容

(VPersonResultBlock!) -> Void askForMe(self: VDataStore)

我所希望的是将其自动完成为一个闭包,尽管它似乎正确地看到了所有信息,但它所期望的并不符合 Objective-C 似乎理解的内容。

我如何从 swift 中正确调用它?

最佳答案

直接将您的 ObjC 调用代码转换为 Swift 是

VDataStore.instance().askForMe() {
person, error in
// do things with myself that aren't strange
}

您的问题是 askForMe 是实例方法,但您是从类对象 VDataStore.askForMe 访问的。 Swift 将为您提供一个以实例作为输入的函数对象。

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

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