簡體   English   中英

為什么在Swift中不能在雙精度元組上使用min()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM