zoukankan      html  css  js  c++  java
  • swift中的AnyHashable

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

  • 相关阅读:
    输出菱形
    for语句输出三角形
    阶乘倒数的和
    变量赋值判断奇偶
    928作业
    各种主流数据库的比较(所以说我觉得Oracle这个keng?入的不错?)
    Oracle创建表
    (转载)全球唯一标识GUID
    (转载)Java基础知识总结
    两天以来对plsqldev操作的记忆
  • 原文地址:https://www.cnblogs.com/tig666666/p/7542826.html
Copyright © 2011-2022 走看看