【发布时间】:2017-08-15 04:39:21
【问题描述】:
我正在尝试找到如何在 swift3 中编写这些块,任何帮助将不胜感激。
我在 swift3 项目中使用 obj-c PocketSDK。 https://github.com/Pocket/Pocket-ObjC-SDK
我可以通过适当的 Bridge-Header 设置很好地使用此 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);
迅速? (这显示错误。)
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
}
@更新
我可以避免没有类型 def 的编译错误,但如果我输入参数,仍然会得到无法识别的选择器。如果我在参数中设置 nil,但我不明白。字典有什么问题吗?
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-08-15 14:05:51.345611+0900 Voicepaper2[1062:286998] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[_SwiftTypePreservingNSNumber 长度]:无法识别的选择器发送到实例 0x174624540' * 首先抛出调用栈:
【问题讨论】:
-
我认为在swift中你不必在调用时声明类型,只需要变量名
-
谢谢,看来参数部分(如何快速制作字典)可能是错误的。
-
我更新了问题,如果你有时间可以看看。
-
您是否尝试过使用 NSDictionary 而不是 [String: Any]?它们不是一回事。
-
问题是“count”:20,但应该是“20”。感谢您的帮助!