【问题标题】:Swift changes the type of parameter of a block, which is also the parameter of Objective-C methodSwift改变一个block的参数类型,也是Objective-C方法的参数
【发布时间】:2014-11-08 16:22:49
【问题描述】:

我有一个 Objective-C 类,它的方法带有块参数:

+ (void)getCurrentUserInfoWithToken:(NSString*)token completionHandler:(void (^)(NSDictionary* userData))handler

如您所见,该块具有 NSDictionary 参数。但是当我尝试快速转换此方法时,它会给出一个错误:“'[NSObject : AnyObject]' 与 'NSDictionary' 不同”。这是我的 Swift 代码:

ClockfaceAPI.getCurrentUserInfoWithToken(token, completionHandler: {
            (userData : NSDictionary!) in
            // block implementation goes here
})

我不知道如何解决它=/

【问题讨论】:

标签: ios objective-c swift objective-c-blocks


【解决方案1】:

这是有道理的,因为您的 NSDictionary* 被解释为 [NSObject:AnyObject]

您不必指定类型。例如。只说userData 而没有: NSDictionary! 就可以了。 Swift 会根据声明自动推断类型。

ClockFaceAPI.getCurrentUserInfoWithToken(token, completionHandler: { (dict) -> Void in
    for (k, v) in dict {
        println(k)
        println(v)
    }
})

【讨论】:

  • 但是当我这样做然后调用 dict.objectForKey 时,它说 [NSObject:AnyObject] 没有这样的方法 =/
  • 不要使用objectForKey。使用下标语法,例如dict[key] 而不是 dict.objectForKey(key)
  • 哇!谢谢你们=)
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多