以下代码将与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.maxHashablehashValue声明为Int),则将收到该崩溃类型。
如果需要溢出,则必须使用溢出算术运算符,如swift编程指南Overflow Operators area of the Basic Operators部分中所定义。
它们是:&+&-&*

10-05 20:02