Ios 如何将带有回调的Objective-C传递给Swift方法?
我真的不知道怎么问这个问题,但是:Ios 如何将带有回调的Objective-C传递给Swift方法?,ios,swift,Ios,Swift,我真的不知道怎么问这个问题,但是: 我在Objective-C和Swift之间架起了一座桥梁 在Obj-C类中,我调用Swift类 我的课很快 我的Obj-C类应该有一个块来接收来自Swift类的一些数据 它应该是这样的(这个代码是错误的,但是我认为它应该是这样的) Obj-C 迅捷的 那么,有什么帮助吗?根据您的规范,这部分是不可能的: productsRequestCompletionHandler?(true, products) 如果ProductsRequestCompletionH
那么,有什么帮助吗?根据您的规范,这部分是不可能的:
productsRequestCompletionHandler?(true, products)
如果ProductsRequestCompletionHandler只接受一个值,则不能返回两个值。因此,您必须修改ProductsRequestCompletionHandler的定义
然后我们可以想象,在Swift方面,我们有这样一个类:
@objc class IAPBridge : NSObject {
public typealias ProductsRequestCompletionHandler = (Bool, [SKProduct]?) -> Void
@objc func requestProducts(_ ch:ProductsRequestCompletionHandler) {
let products : [SKProduct]? = // whatever
ch(true, products)
}
}
在Objective-C端,类的.m文件必须导入隐式生成的桥接头:
#import "MyApp-Swift.h" // or whatever it is called
在您的Objective-C类学生眼中,IAPBridge有以下方法:
- (void)requestProducts:(SWIFT_NOESCAPE void (^ _Nonnull)(BOOL, NSArray<SKProduct *> * _Nullable))ch;
-(void)requestProducts:(SWIFT\u NOESCAPE void(^\u Nonnull)(BOOL,NSArray*\u Nullable))ch;
所以现在你可以称之为:
IAPBridge* b = [[IAPBridge alloc] init];
[b requestProducts:^(BOOL success, NSArray<SKProduct *> * products) {
if (success) {
NSLog(@"Thank you for the products! They are %@", products);
} else {
NSLog(@"%@", @"Darn, something went wrong");
}
}];
IAPBridge*b=[[IAPBridge alloc]init];
[b请求产品:^(BOOL success,NSArray*产品){
如果(成功){
NSLog(@“感谢您的产品!它们是%@”,产品);
}否则{
NSLog(@“%@”,“该死,出了点问题”);
}
}];
根据您的规范,此部分是不可能的:
productsRequestCompletionHandler?(true, products)
如果ProductsRequestCompletionHandler只接受一个值,则不能返回两个值。因此,您必须修改ProductsRequestCompletionHandler的定义
然后我们可以想象,在Swift方面,我们有这样一个类:
@objc class IAPBridge : NSObject {
public typealias ProductsRequestCompletionHandler = (Bool, [SKProduct]?) -> Void
@objc func requestProducts(_ ch:ProductsRequestCompletionHandler) {
let products : [SKProduct]? = // whatever
ch(true, products)
}
}
在Objective-C端,类的.m文件必须导入隐式生成的桥接头:
#import "MyApp-Swift.h" // or whatever it is called
在您的Objective-C类学生眼中,IAPBridge有以下方法:
- (void)requestProducts:(SWIFT_NOESCAPE void (^ _Nonnull)(BOOL, NSArray<SKProduct *> * _Nullable))ch;
-(void)requestProducts:(SWIFT\u NOESCAPE void(^\u Nonnull)(BOOL,NSArray*\u Nullable))ch;
所以现在你可以称之为:
IAPBridge* b = [[IAPBridge alloc] init];
[b requestProducts:^(BOOL success, NSArray<SKProduct *> * products) {
if (success) {
NSLog(@"Thank you for the products! They are %@", products);
} else {
NSLog(@"%@", @"Darn, something went wrong");
}
}];
IAPBridge*b=[[IAPBridge alloc]init];
[b请求产品:^(BOOL success,NSArray*产品){
如果(成功){
NSLog(@“感谢您的产品!它们是%@”,产品);
}否则{
NSLog(@“%@”,“该死,出了点问题”);
}
}];
你似乎已经知道答案了,那么你能解释到底还有什么问题吗?你似乎已经知道答案了,那么你能解释到底还有什么问题吗?