2015-11-03 15 views
1
與關聯值檢查枚舉的枚舉情況下

我試圖檢查已關聯的值的每一種情況下像這樣的枚舉的情況下:如何斯威夫特

enum status { 
    case awake(obj1) 
    case sleeping(obj2) 
    case walking(obj3) 
    case running(obj4) 
} 

我使用if(status == deviceStatus.awake){檢查狀態的情況下和我得到一個錯誤:Binary operator '==' cannot be applied to operands of type 'status' and '(obj1) -> status'

+1

你在哪裏定義了deviceStatus?以及這些對象的類型(obj1,obj2,...)是什麼類型? – Shoaib

+0

http://stackoverflow.com/q/31548855/994104可能的重複 – Jeremy

回答

4

您可以使用if case Status.awake(_) = deviceStatus檢查deviceStatus設置爲awake枚舉值:

class Obj1 { } 
class Obj2 { } 
class Obj3 { } 
class Obj4 { } 

enum Status { 
    case awake(Obj1) 
    case sleeping(Obj2) 
    case walking(Obj3) 
    case running(Obj4) 
} 

let deviceStatus = Status.awake(Obj1()) 

if case .awake(_) = deviceStatus { 
    print("awake") 
} else if case .sleeping(_) = deviceStatus { 
    print("sleeping") 
} 

// you can also use a switch statement 

switch deviceStatus { 
case .awake(_): 
    print("awake") 
case .sleeping(_): 
    print("sleeping") 
default: 
    print("something else") 
}