• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift中的AnyHashable

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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] 来处理了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift语言中与C/C++和Java不同的语法(二)发布时间:2022-07-13
下一篇:
[Swift]LCP2.分式化简发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap