[英]cannot convert value of '()' to expected argument type 'String' swift 3.0
[英]Swift 3.0 cannot convert value of type (_, _)->() to Expected argument type 'ObjectsOrErrorBlock'
我已經在Objective-C中使用typedef來定義一個完成塊,如下所示:
typedef void(^ObjectsOrErrorBlock) (NSArray* objects, NSError* error);
然后,我有了一個Swift 3.0函數,該函數將ObjectsOrErrorBlock作為參數。 當我嘗試使用該功能時,我收到標題中提到的錯誤。 這就是我試圖稱呼它的方式:
BPDKAPIClient.shared().getLeadSources({ (leadSourceNames, error) in
self.replaceAll(leadSourceNames.flatMap({$0}))
})
這是Xcode自動填充我的函數的方式:
BPDKAPIClient.shared().getLeadSources { ([Any]?, Error?) in
code
}
我調用函數的方式有什么問題? 我應該怎么稱呼它?
因此,有人指出問題類似於:在非實例對象(又名BPDAPIClient)上從解決方案是實例方法的地方迅速調用Objective-C typedef塊 。 shared()函數實際上返回一個實例類型的實例,因此不會在某個非實例對象上調用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})返回哪個?”
這使我指出該塊的內容不正確,從而引發了錯誤。 這很奇怪,因為錯誤指向代碼塊的開始,而不是內容,您認為它會指出不兼容的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.