Я использовал typedef в target-c для определения блока завершения следующим образом:
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
}
Что не так с тем, как я вызываю функцию? Как я должен называть это?
Таким образом, было указано, что вопрос похож на: 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})
? - person OOPer   schedule 06.10.2016