以下代码将与exc_bad指令一起崩溃。我试图找出崩溃的实际原因,或者是否有更好的方法来计算给定结构的hashvalue。
struct Provider{
let name = "AmazonPrime"
let country = "us"
let identifier = "us-AmazonPrime"
}
let provider = Provider()
//Crash on hashValue
let hashValue = (provider.name.hashValue + provider.country.hashValue + provider.identifier.hashValue)
最佳答案
使用基本算术运算符时,swift语言不允许数学溢出(如swift编程指南Arithmetic Operators area of the Basic Operators部分所述)。如果要添加的3个散列值超过Int.max
(Hashable
将hashValue
声明为Int
),则将收到该崩溃类型。
如果需要溢出,则必须使用溢出算术运算符,如swift编程指南Overflow Operators area of the Basic Operators部分中所定义。
它们是:&+
&-
和&*