簡體   English   中英

Swift 3.0無法將(_,_)->()類型的值轉換為期望的參數類型'ObjectsOrErrorBlock'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM