2017-08-15 32 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 
    } 
相关问题