[英]Why can't I use min() on a tuple of doubles in Swift?
var coordinatesDouble = (Double(latitudeTextField.text!), Double(longitudeTextField.text!))
var boundingBoxLat: (Double, Double)
var boundingBoxLon: (Double, Double)
boundingBoxLat = (coordinatesDouble.0! - Constants.Flickr.SearchBBoxHalfHeight, coordinatesDouble.1! + Constants.Flickr.SearchBBoxHalfHeight)
boundingBoxLon = (coordinatesDouble.1! - Constants.Flickr.SearchBBoxHalfWidth, coordinatesDouble.1! + Constants.Flickr.SearchBBoxHalfWidth)
if min(boundingBoxLat) < -90.0 {
我正在嘗試在if語句中使用min(),但出現錯誤:
“無法使用類型(雙精度,雙精度)的參數列表調用'min'”
我認為這正是該功能的目的。 我想念什么嗎?
每個雙精度型的方程是一個雙精度型被減去或加到另一個,從而得到一個雙精度型。 然后,if語句應確定元組中的最小值是否低於-90.0。
我想念什么嗎?
是。
請檢查以下內容: SE-0029從函數應用程序中刪除隱式元組splat行為
在包含此SE-0029的Swift版本中,Swift不接受兩個成員的元組作為帶有兩個參數的函數的實際參數。
( min
還有另一個重載,但是在這里無關緊要。)
正如JAL所說,您需要傳遞兩個參數來調用min(_:_:)
:
min(boundingBoxLat.0, boundingBoxLat.1)
一些補充。
我想知道這行是否真的是您想要的:
boundingBoxLat = (coordinatesDouble.0! - Constants.Flickr.SearchBBoxHalfHeight, coordinatesDouble.1! + Constants.Flickr.SearchBBoxHalfHeight)
應該是這樣,不是嗎? (請查找后半部分的細微差別。):
boundingBoxLat = (coordinatesDouble.0! - Constants.Flickr.SearchBBoxHalfHeight, coordinatesDouble.0! + Constants.Flickr.SearchBBoxHalfHeight)
但是,我的猜測是否正確並不重要。 只有您應該知道,過多使用元組的這種代碼不太可讀。
我建議您定義自己的結構來表示boundingBox :
struct CoordinateBox {
var minLatitude: Double
var maxLatitude: Double
var minLongitude: Double
var maxLongitude: Double
init(latitude: Double, longitude: Double, height: Double, width: Double) {
assert(height > 0.0)
assert(width > 0.0)
minLatitude = latitude - height
maxLatitude = latitude + height
minLongitude = longitude - width
maxLongitude = longitude + width
}
}
let boundingBox = CoordinateBox(latitude: Double(latitudeTextField.text ?? "") ?? 0,
longitude: Double(longitudeTextField.text ?? "") ?? 0,
height: Constants.Flickr.SearchBBoxHalfHeight,
width: Constants.Flickr.SearchBBoxHalfWidth)
if boundingBox.minLatitude < -90.0 {
//...
}
您將不會與.0
s和.1
s混淆。
元組可以將不同的數據類型混合在一起。 如果所有數據類型都相同,則應使用數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.