“表达式太复杂,无法在合理的时间内解决......”与hashValue

时间:2018-04-06 06:48:16

标签: swift hash compiler-errors

尝试使我的整个数据模型可以使用,例如......

let id:Int
let projectID:Int
let parentID:Int
let name:String
let description:String
let url:String
let startOn:Date?
let startedOn:Date?
let dueOn:Date?
let completedOn:Date?
let isStarted:Bool
let isCompleted:Bool

var hashValue:Int
{
    return (31 &* id.hashValue)
            &+ projectID.hashValue
            &+ parentID.hashValue
            &+ name.hashValue
            &+ description.hashValue
            &+ url.hashValue
            &+ (startOn != nil ? startOn!.hashValue: 0)
            &+ (startedOn != nil ? startedOn!.hashValue: 0)
            &+ (dueOn != nil ? dueOn!.hashValue: 0)
            &+ (completedOn != nil ? completedOn!.hashValue: 0)
            &+ isStarted.hashValue
            &+ isCompleted.hashValue
}

我收到编译错误:

  

错误:(112,5)表达太复杂而无法合理解决   时间;考虑将表达分解为不同的   子表达式

因此问题是:如何使哈希取决于许多属性的对象可以使用?我有一些模型对象的数量是上述属性的3-4倍。

1 个答案:

答案 0 :(得分:0)

在多个部分中断你的表达,并在下一个附加中添加所有这些

var hashValue:Int
    {
        let firstFrg =  (31 &* id.hashValue)
                &+ projectID.hashValue
                &+ parentID.hashValue
                &+ name.hashValue
        let secondFrg = firstFrg + &+ description.hashValue
                &+ url.hashValue
                &+ (startOn != nil ? startOn!.hashValue: 0)
        let thirdFrg = secondFrg + &+ (startedOn != nil ? startedOn!.hashValue: 0)
                &+ (dueOn != nil ? dueOn!.hashValue: 0)
                &+ (completedOn != nil ? completedOn!.hashValue: 0)
        let fourthFrg = thirdFrg + &+ isStarted.hashValue
                &+ isCompleted.hashValue

         return fourthFrg
    }