2017-08-16 53 views
0
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 { 

我想如果語句在使用min(),但我得到的錯誤:爲什麼我不能在swift中使用雙精度元組min()?

"Cannot invoke 'min' with an argument list of type (Double, Double)"

我認爲這是具體是什麼,這個功能用的。我錯過了什麼嗎?

每個雙方的等式是一個雙方被減去或添加到另一個,導致雙。 if語句應該確定元組中的最低值是否低於-90.0。

+0

如果你有一個座標,爲什麼不使用'CGPoint'? – JAL

+1

如果您必須使用元組,您必須像這樣訪問每個元素:'min(boundingBoxLat.0,boundingBoxLat.1)' – JAL

回答

0

元組可以有不同的數據類型混合在一起。如果所有數據類型都相同,則應該使用數組。

2

我錯過了什麼嗎?

是的。

請檢查: SE-0029 Remove implicit tuple splat behavior from function applications

在包括該SE-0029雨燕的版本,雨燕不接受兩名成員作爲函數兩個參數實際參數的元組。

(沒有爲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內混淆。

+0

這是關於最佳實踐的好建議,謝謝。關於JAL的建議也非常有趣。 – Pigpocket

相關問題