- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我通过大量教程摸索着理解上述 3 个术语之间的区别,并找到了新术语 type erased
container,现在它让我感到困惑。这引发了很多问题。
为什么 Swift 引入 AnyHashable
?
这 3 个术语之间的根本区别是什么?
Any
和 AnyHashable
的区别?
Hashable
和 AnyHashable
的区别?
什么时候使用Hashable
,什么时候使用AnyHashable
?
最后但也是最令人困惑的是,在 AnyHashable
的上下文中,type erased
术语的含义是什么?
作为上下文,我遵循了Swift Evolution Proposal SE-0131 .
最佳答案
了解它们是什么比了解它们之间的区别更重要。
Any
意思是“任何东西”,范围从 swift 枚举、元组、闭包、结构、类、协议(protocol)等等。每种类型都可以分配给类型为 Any
的变量.
Hashable
是一个协议(protocol),上面写着“这个对象可以被散列,即有一个散列码”。如果您的对象可以被散列,请实现此协议(protocol),因为很多数据结构(即字典和集合)都需要它。
那么 AnyHashable
是什么? ?
通常,如果您尝试这样做:
let a: Set<Hashable>?
它不编译。这是因为 Hashable
继承自 Equatable
其中包含 Self
.
现在,假设您想将一个方法从 Objective-C 移植到 swift。该方法采用 NSSet
类型的参数.在 Swift 中,这将变成 Set
,但它的通用参数是什么?如果我们只输入 Any
就像我们处理 NSArray
一样s,它不起作用,因为 Set
的对象必须是可散列的。但是如果我们把 Set<Hashable>
它也不起作用,因为 Hashable
只能用作通用约束。这就是他们包装 Hashable
的原因用AnyHashable
不使用Self
因此可以用作通用参数。
关于“类型删除”的含义:
拥有Self
在协议(protocol)中是一种 like a protocol with a generic parameter ,并且泛型参数始终是符合类。这导致协议(protocol)无法单独使用,如 Set<Hashable>
因为“通用参数”是未知的。 AnyHashable
通过不使用 Self
解决了这个问题所以它现在变成了一个普通的结构。它“删除”通用 Self
类型。
关于ios - Swift 3 中的 Any 、 Hashable 、 AnyHashable 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44513675/
我是 Swift 的新手,我不知道如何通过索引访问 [AnyHashable : Any] 类型的变量 更具体地说,我想通过索引访问 HTTPURLResponse 实例的 allHeaderFiel
我有这个 Playground : import Foundation enum WeekDay: Int { case mon, tues, wed, thurs, fri, sat, su
我正在将我的 Objective-C 代码转换为 Swift。我有自己的 DataStructure 类,称为“DCclass”,继承自“NSObject”...我已经完成了所有必需的事情,例如:在
我需要比较符合协议(protocol) P 的结构数组。 P 不能符合 Equatable,因为它不能有“ self 要求”。 正在创建 AnyEquatable作为类型删除是为此目的的常见做法。但是
抱歉, super 菜鸟试图编译这个,这是我试图修复的最后一个错误。 let optionalString0 = formatter.stringFromNumber(NSNumber(localN
这是一个 AnyHashable 不支持枚举转换的简单案例。 enum testEnum: String { case Test } let myObject: AnyHashable = t
我正在将我的代码从 Objective C 转换为 Swift。我有一个代码,它从一个 swift 方法调用一个 objective-c 方法。 obj C 方法返回一个 NSDictionary。显
我在 didreceiveRemoteNotification 中收到通知,但我无法将 userInfo 转换为 [String: Any] 类型的字典 func application(_ appl
我有一个由 XCDYoutubeKit pod 在 swift projet 中返回的字典数组: print(video?.streamURLs ?? "nothing to print") [Any
我怎么能做到这一点? var dict = [AnyHashable : Int]() dict[NSObject()] = 1 dict[""] = 2 这意味着 NSObj
我正在尝试解析推送通知中的next_question_detail,但全部失败: for data in notification.request.content.userInfo { p
我尝试使用 Snapchat 的登录工具包来允许用户使用 Snapchat 登录,但他们的文档给了我一个错误。 复制文档后会出现“Type '[AnyHashable : Any]?'”没有下标成员。
我正在尝试从类型为 [AnyHashable: Any] 的变量访问特定值,但是,我在访问任何值时遇到错误。我已经浏览了有关此问题的互联网,但没有找到任何具体的解决方案。那么有没有其他方法可以访问它们
我有以下对象,然后想合并。 var prop1 = [AnyHashable: Any]() prop1["key1"] = "Phase3" prop1["key2"] = "405"
我怎么可以这样做? var dict = [AnyHashable : Int]() dict[NSObject()] = 1 dict[""] = 2 这意味着 NSObje
我正在调用 Web 服务,它返回的数据是 [AnyHashable:URL] 类型的字典。对于 key ,我确切地知道它的类型,即 String。所以我尝试使用以下方法获取 URL: streamUR
我正在使用 APAddressBook从用户手机获取地址簿。当我打印变量 serializedContacts 时,它会生成以下用户对象: [[ AnyHashable("name"): {
我通过大量教程摸索着理解上述 3 个术语之间的区别,并找到了新术语 type erased container,现在它让我感到困惑。这引发了很多问题。 为什么 Swift 引入 AnyHashable
如何在 swift 中访问任何 AnyHashable 数据我的数据如下,下面是我单击通知时的日志。当我单击 notif 以及数据记录时,我想打印或获取它,以便我可以将其加载到 View 上。它已经在
我目前正在使用 Swift 4 开发电子商务应用程序并将数据与 Moltin 关联起来。我正在为学校做这件事,所以我是新来的。我也在关注 CodeWithChris 的教程,但那已经过时并且我的布局有
我是一名优秀的程序员,十分优秀!