我在xcode 9.3和xcode 10 beta 3操场上都运行此代码
import Foundation
public protocol EnumCollection: Hashable {
static func cases() -> AnySequence<Self>
}
public extension EnumCollection {
public static func cases() -> AnySequence<Self> {
return AnySequence { () -> AnyIterator<Self> in
var raw = 0
return AnyIterator {
let current: Self = withUnsafePointer(to: &raw) { $0.withMemoryRebound(to: self, capacity: 1) { $0.pointee } }
guard current.hashValue == raw else {
return nil
}
raw += 1
return current
}
}
}
}
enum NumberEnum: EnumCollection{
case one, two, three, four
}
Array(NumberEnum.cases()).count
即使两者都使用Swift 4.1,但它们却给了我不同的结果
在 xcode 9.3 上,数组的大小为 4
在 xcode 10 beta 3 上,数组的大小为 0
我一点都不明白。
这是获取所有枚举值序列的一种未公开的方法,并且仅在偶然的早期Swift版本中才起作用。它依赖于枚举值的哈希值是从零开始的连续整数。
对于Swift 4.2(即使在Swift 4兼容模式下运行),这绝对不再起作用,因为哈希值现在始终是随机的,请参阅SE-0206 Hashable
Enhancements
:
为了使散列值难以预测,默认情况下,标准散列函数使用每个执行的随机种子。
您可以使用
print(NumberEnum.one.hashValue)
print(NumberEnum.two.hashValue)
这不会 不 打印0
和1
在Xcode 10,但一些其他值这也与每个程序运行而有所不同。
extension NumberEnum: CaseIterable { }
print(Array(NumberEnum.allCases).count) // 4
我在xcode 9.3和xcode 10 beta 3游乐场中都运行了这段代码 在Xcode9.3中,数组的大小为4 在xcode 10 beta 3上,数组的大小为0 我完全不明白这一点。
而输出是 谁能详细说明一下1380605909318和61341428160000之间的区别?
我有以下... 但是当我试着运行这个时,我得到。。。 组织。springframework。豆。工厂BeanDefinitionStoreException:未能分析配置类[boot.Application];嵌套的异常是org。springframework。上下文注释。ConflictingBeanDefinitionException:为bean类[package1.userService]
为什么用于取消引用传递给printf的指针的类型会影响输出,即使类型大小相同: 输出: 我希望最后两行都正确打印0x3ff0000000000000,即IEEE754双浮点中1.0的表示形式。
问题内容: 我们将更新创建从Java 7到Java 8的构建的CI系统。稍后,我们希望将项目一个接一个地迁移到Java 8。当然,我们希望能够为仍使用Java 7的旧版本创建错误修正版本。 如果我们将构建相同的源,目标版本和源版本从JDK 7转移到JDK 8,我们是否可以确定不会出现任何问题?我们在开发机器上进行了测试,没有任何问题。 在此之前,我们还将逐步将部署服务器从JRE 7更新到JRE 8
我正在尝试迁移tomcat服务器。 两者都使用版本,并且都应该准备好将我的java/jsp文件从一台服务器带到另一台服务器。我做到了,并且我得到了错误。这很正常,因为在旧的版本中我有,在新安装中我有(均来自Oracle)。 我继续将第二个升级到1.8。一切都很好,因为在新版本中,java版本的输出是: java版本“1.8.0\u 191”java(TM)SE运行时环境(build 1.8.0\u