AnyHashable是调和objc和Swift的产物

典型的场景是,objc下无泛型的NSDictionary到了Swift下,会变成什么?(典型例子是苹果来的推送消息)

[Any: Any],这肯定不对,key必须有hash值,

[AnyObject: Any],这也不对,同样的AnyObject也未必有hash值

大一统一的理论来了,那就是AnyHashable这个Struct

[AnyHashable: Any] 就是 NSDictionary 在Swift下的形态。

定义部分请看头文件,或官方文档,我只讲用法:

先给出MyClass.h (objc就是这么烦啊,一个简单的类偏要分成两个文件)

#import <Foundation/Foundation.h> 

 NS_ASSUME_NONNULL_BEGIN 

 @interface MyClass : NSObject
@property (nonatomic, copy) NSDictionary *info;
@end NS_ASSUME_NONNULL_END 下面是MyClass.m #import "MyClass.h" @implementation MyClass - (instancetype)init
{
self = [super init];
if (self) {
_info = @{@"key0": @3, @"key1": @"value"};
}
return self;
} @end

// 下面是Swift代码

let c = MyClass()
print(c.info) // [AnyHashable("key1"): value, AnyHashable("key0"): 3]
print(c.info[AnyHashable("key0") as! Int) // 3
print(c.info[AnyHashable("key1") as! String) // value guard let d = c.info as? [String: Any], let v0 = d["key0"] as? Int, let v1 = d["key1"] as? String else { return }
print("d = \(d)") // d = ["key1": value, "key0": 3]
print("v0 = \(v0), v1 = \(v1)") // v0 = 3, v1 = value

值得注意的是,如果info的加入这样一对key-value,@3 : @"abc",

那就只能按[AnyHashable: Any] 来处理了。

最新文章

  1. Atitit &#160;自动化gui 与 发帖机 技术
  2. ArcGIS Engine开发之空间查询
  3. 编译osgEarth2.8+VS2013+CMake3.4.0在Release版本的问题
  4. Android 广播 BroadcastReceiver
  5. 基于服务(Web Service)的文件管理Winform程序实现
  6. navDemo
  7. TFS任务更新
  8. 论velocity在不同后台语言下的不同
  9. Guava文档翻译之 Service
  10. NullableKey:解决Dictionary中键不能为null的问题 zt
  11. 图解JVM在内存中申请对象及垃圾回收流程
  12. leetcode面试准备: Jump Game
  13. android .9.png ”点九” 图片制作方法
  14. C: define many functions using predefine..
  15. Opengl4.5 中文手册—D
  16. HDU-2222文字检索
  17. 【重学计算机】计组D2章:数据表示
  18. C# Lambda表达式和linq表达式 之 匿名对象查询接收
  19. JAVA操作mysql
  20. English trip -- VC(情景课)2 C Where&#39;s my pencli?

热门文章

  1. HDFS对象存储--Ozone架构设计
  2. BZOJ 1032 JSOI2007 祖码Zuma 动态规划
  3. Eclipse的Servers视图中无法加入Tomcat6/Tomcat7
  4. nginx、fastCGI、php-fpm关系梳理
  5. Struts配置详解
  6. jmeter+ant+jenkins的自动化接口测试
  7. DEDECMS最新5.7版在Windows下的Memcache安装
  8. Java 向下转型
  9. Design Patterns笔记
  10. Android模拟器