- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 objective-c 中使用 typedef 来定义一个完成 block ,如下所示:
typedef void(^ObjectsOrErrorBlock) (NSArray* objects, NSError* error);
然后我有一个将 ObjectsOrErrorBlock 作为参数的 Swift 3.0 函数。当我尝试使用该功能时,我收到标题中提到的错误。这就是我试图调用它的方式:
BPDKAPIClient.shared().getLeadSources({ (leadSourceNames, error) in
self.replaceAll(leadSourceNames.flatMap({$0}))
})
这就是 Xcode 自动填充我的函数的方式:
BPDKAPIClient.shared().getLeadSources { ([Any]?, Error?) in
code
}
我调用函数的方式有什么问题?我应该如何调用它?
所以有人指出问题类似于: Calling objective-C typedef block from swift解决方案是在非实例对象(又名 BPDAPIClient)上调用实例方法。 shared() 函数实际上返回 instancetype 的实例,因此 getLeadSources 方法不是在非实例对象上调用,而是在某个实例上调用。这是共享的定义方式:
+ (instancetype) sharedClient;
+ (instancetype)sharedClient {
static BPDKAPIClient *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
// Set the client configuration to be the default.
BPDKAPIClientConfiguration* defaultConfig = [BPDKAPIClientConfiguration defaultConfiguration];
[sharedMyManager setApiClientConfig:defaultConfig];
[sharedMyManager setAppSource:@""];
});
//TODO: add logic to allow first pass at shared manager to be allowed, but subsuquent must check that we called "setAppId:ClientKey:Environment"
return sharedMyManager;
}
最佳答案
从评论来看,
“取决于您如何声明您的 replaceAll。是否需要 [Any]?哪个 leadSourceNames.flatMap({$0}) 返回?”
这让我指出 block 的内容不正确导致抛出错误。这很奇怪,因为错误指向 block 的开头,而不是内容,你会认为它会说不兼容的类型。
关于ios - Swift 3.0 无法将 (_, _)->() 类型的值转换为预期参数类型 'ObjectsOrErrorBlock',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39884337/
我在 objective-c 中使用 typedef 来定义一个完成 block ,如下所示: typedef void(^ObjectsOrErrorBlock) (NSArray* objects
我是一名优秀的程序员,十分优秀!