2016-09-22 48 views
-2

我正在製作一個動作按鈕,每次按下按鈕時都會執行不同的功能。當我點擊一次,地圖變爲衛星,當我再次點擊它,它改變標準,當我再次點擊它,它改變混合,當我再次點擊它,它可以追溯到衛星一個具有多種功能的按鈕 - Swift

這是我的代碼。請讓我知道我在哪裏做錯了。

@IBAction func changeLayout(_ sender: AnyObject) { 
    switch (sender.anyObject()) { 
    case 0: 
     mapView.mapType = MKMapType.satellite 
    case 1: 
     mapView.mapType = MKMapType.standard 
    default: 
     mapView.mapType = MKMapType.hybrid 
    } 

} 

,我得到的錯誤說:類型「詮釋」的

表達模式無法比擬的類型的值「否?」 ViewController.swift

+0

「請讓我知道在哪裏我做錯了。」爲了做到這一點,你需要告訴_us_發生了什麼。 –

+0

你並沒有測試_current_'mapView.mapType',所以你不知道_new_'mapType'應該是什麼! – matt

+0

opps!完全忘記把我的錯誤。謝謝你提醒我。我編輯了這篇文章 –

回答

2

我認爲通過按UIButton調用該方法?如果是這樣,您可以用UIButton替換AnyObject。然後你可以使用UIButton的tag屬性來檢查當前狀態。

@IBAction func changeLayout(_ sender: UIButton) { 
    sender.tag += 1 
    if sender.tag > 2 { sender.tag = 0 } 

    switch sender.tag { 
    case 1: 
     mapView.mapType = .satellite 
    case 2: 
     mapView.mapType = .hybrid 
    default: 
     mapView.mapType = .standard 
    } 
} 

而讓事情變得「奔來」,你可以刪除交換機周圍值括號以及枚舉的類型。 ;)

+0

您可以通過Google搜索節省很多時間並找到不同的方式。謝謝你,先生! –

0

一個簡單的方法就是使用原始值切換枚舉。

@IBAction func changeLayout(_ sender: UIButton) { 

    mapView.mapType = MKMapType(rawValue: (mapView.mapType.rawValue + 1) % 2) 
} 

這是假設你想要的原始值是0,1,2(我認爲他們是)