首页 > 解决方案 > Swift 按错误排序:无法转换“CGFloat”类型的值?到预期的参数类型'Self'

问题描述

这是自定义对象:

struct ScannedFacts {
    var result = -1
    var frame:CGRect? = nil
    var name = ""
}

这是我想对以下类型的数组进行排序的函数:

func getSortedData(data:[(String, ScannedFacts)]) -> [(String, ScannedFacts)] {
    return data.sorted(by: {$0.1.frame?.minX < $1.1.frame?.minX})
}

这是我得到的错误,我真的无法弄清楚:

Cannot convert value of type 'CGFloat?' to expected argument type 'Self'

我在这里错过了什么?

标签: iosarraysswiftsortingswift3

解决方案


您需要在比较值时使用CGFloat而不是:CGFloat?

为了更容易,您可以使用计算属性:

struct ScannedFacts {
    var frame:CGRect? = nil

    var frameMinX: CGFloat {
        // assume we treat `nil` the same way as `0`
        frame?.minX ?? 0
    }
}
return data.sorted { $0.1.frameMinX < $1.1.frameMinX }

推荐阅读