2017-08-15 36 views
0

我想找到如何在swift3中編寫這個塊,任何幫助將不勝感激。如何以swift3正確的方式編寫塊(閉包)?

我在swift3項目中使用obj-c PocketSDK。 https://github.com/Pocket/Pocket-ObjC-SDK

我可以使用這個SDK正確的橋頭設置,但仍然不知道如何我可以寫塊部分。

OBJ-C

[[PocketAPI sharedAPI] callAPIMethod:@"get" 
         withHTTPMethod:PocketAPIHTTPMethodGET 
          arguments:arguments 
           handler:^(PocketAPI *api, NSString *apiMethod, NSDictionary *response, NSError *error) { 
           }]; 

這是PocketSDK類型DEF。

-(void)callAPIMethod:(NSString *)apiMethod withHTTPMethod:(PocketAPIHTTPMethod)HTTPMethod arguments:(NSDictionary *)arguments delegate:(id<PocketAPIDelegate>)delegate; 

    typedef void(^PocketAPIResponseHandler)(PocketAPI *api, NSString*apiMethod, NSDictionary *response, NSError *error); 

swift? (這表明錯誤。)

let arguments: [String: Any] = [ 
     "state": "unread", 
     "count": 20 
    ] 

    PocketAPI.shared().callMethod("get", with: PocketAPIHTTPMethodGET, arguments: arguments) { 
     (api: PocketAPI, 
     apiMethod: String, 
     esponse: [AnyHashable:Any], 
     error: Error) in 
    } 

@Updated

我能避免無類型定義編譯錯誤,但是如果我把參數仍然得到了無法識別的選擇。如果我在參數中設置零,我不明白。字典有什麼問題嗎?

var arguments = [String : Any]() 
    arguments["count"] = 20 
    arguments["state"] = "unread" 

    PocketAPI.shared().callMethod("get", with: PocketAPIHTTPMethodGET, arguments: arguments) { 
     (api, 
     apiMethod, 
     response, 
     error) in 
    } 

錯誤。

- [_ SwiftTypePreservingNSNumber長度]:無法識別的選擇發送到實例0x174624540 2017年8月15日14:05:51.345611 + 0900 Voicepaper2 [1062:286998] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException' 的,原因: ' - [_ SwiftTypePreservingNSNumber 長]:無法識別的選擇發送到實例0x174624540' *第一擲調用堆棧:

+1

我覺得你沒有的時候調用它,只需要在變量名 – Tj3n

+0

由於申報類型迅速,好像參數的一部分(如何使詞典中SWIFT)可能是錯的。 –

+0

我更新了這個問題,如果你有時間的話可以看看,這將不勝感激。 –

回答

0

解決了!這是最後的答案,謝謝!

let arguments: [String: Any] = [ 
     "state": "unread", 
     "count": "20" 
    ] 

    PocketAPI.shared().callMethod("get", with: PocketAPIHTTPMethodGET, arguments: arguments) { 
     (api, 
     apiMethod, 
     response, 
     error) in 
    } 
相關問題