我剛剛開始在Swift中實現我們的一些新功能而不是Objective-c,到目前爲止一切正常,但令我困惑的一件事是如何正確使用Obj- C在斯威夫特塊。在Swift中使用Objective-C塊時保留參數類型
在我的OBJ-C級的我已經定義了一個塊被用來處理呼叫我們的API HTTP響應:
typedef void(^CCAPIClientRequestCompletionBlock)(id response, NSArray *messages, NSDictionary *metaData, NSError *error);
這在下面的方法使用:
-(void)createMeetingWithUsers:(NSArray *)users subject:(NSString *)subject andDescription:(NSString *)description withCompletionBlock:(CCAPIClientRequestCompletionBlock)completionBlock;
我現在正在編寫一個API客戶端來訪問Swift中的新API,並試圖將該塊作爲閉包重用。下面的代碼生成並運行:
apiClient.createMeeting(withUsers: userIds, subject: subject, andDescription: description) { (response, messages, metaData, error) -> Void in
}
,但我希望能夠保持的參數類型,我想我應該可以做一些事情,如:
apiClient.createMeeting(withUsers: userIds, subject: subject, andDescription: description) { (response:Any?, messages:[Any], metaData:[AnyHashable:Any], error:NSError) -> Void in
}
但是當我嘗試這一點,我收到一個錯誤:
Cannot convert value of type '(Any?, [Any], [AnyHashable : Any], NSError) -> Void' to expected argument type 'CCAPIClientRequestCompletionBlock!'
我在這裏錯過了什麼?
您沒有任何空性屬性聲明,但不知爲何,你期望的響應是可選的。那可能怎麼樣? – Andy