Swift sorted by error: Cannot convert value of type 'CGFloat?' to expected argument type 'Self'
Swift sorted by error: Cannot convert value of type 'CGFloat?' to expected argument type 'Self'
这是自定义对象:
struct ScannedFacts {
var result = -1
var frame:CGRect? = nil
var name = ""
}
这是我想要对以下类型的数组进行排序的函数:
func getSortedData(data:[(String, ScannedFacts)]) -> [(String, ScannedFacts)] {
return data.sorted(by: {[=11=].1.frame?.minX < .1.frame?.minX})
}
这是我得到的错误,我真的无法理解:
Cannot convert value of type 'CGFloat?' to expected argument type 'Self'
我在这里错过了什么?
比较值时需要使用 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 { [=11=].1.frameMinX < .1.frameMinX }
ScannedFact
中的 frame
属性 是可选的,因此您可能想在没有任何框架可用或框架 属性 时提供默认值是 nil
。您不能对比较 nil
的两个对象进行排序,因此您需要解包或提供默认值,如下所示:
func getSortedData(data:[(String, ScannedFacts)]) -> [(String, ScannedFacts)] {
return data.sorted(by: {[=10=].1.frame?.minX ?? 0 < .1.frame?.minX ?? 0 })
}
这是自定义对象:
struct ScannedFacts {
var result = -1
var frame:CGRect? = nil
var name = ""
}
这是我想要对以下类型的数组进行排序的函数:
func getSortedData(data:[(String, ScannedFacts)]) -> [(String, ScannedFacts)] {
return data.sorted(by: {[=11=].1.frame?.minX < .1.frame?.minX})
}
这是我得到的错误,我真的无法理解:
Cannot convert value of type 'CGFloat?' to expected argument type 'Self'
我在这里错过了什么?
比较值时需要使用 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 { [=11=].1.frameMinX < .1.frameMinX }
ScannedFact
中的 frame
属性 是可选的,因此您可能想在没有任何框架可用或框架 属性 时提供默认值是 nil
。您不能对比较 nil
的两个对象进行排序,因此您需要解包或提供默认值,如下所示:
func getSortedData(data:[(String, ScannedFacts)]) -> [(String, ScannedFacts)] {
return data.sorted(by: {[=10=].1.frame?.minX ?? 0 < .1.frame?.minX ?? 0 })
}