2015-12-20 82 views
0

從下面的代碼:鑄造和檢查值多種類型

import Foundation 

func checkStatus(statusObj: AnyObject) -> String { 
    if let status = statusObj as? String where status.lowercaseString == "ok" { 
     return "success" 
    } else if let status = statusObj as? Int where status >= 200 && status < 300 { 
     return "success" 
    } else { 
     return "failed" 
    } 
} 

print(checkStatus("ok")) 
print(checkStatus(200)) 
print(checkStatus("error")) 
print(checkStatus(500)) 

有沒有辦法將兩個成功的條件組合成一個單獨的語句?

+0

這應該是你這樣做的方式。合併可能會引入歧義。 –

回答

0

我最後寫這種方式,使用交換機和下通:

func checkStatus(statusObj: AnyObject) -> String { 
    switch statusObj { 
    case let status as Int where 200..<300 ~= status: 
     fallthrough 
    case "ok" as String: 
     return "success" 
    default: 
     return "failed" 
    } 
} 

我不得不扭轉測試,下通將無法正常工作了與讓利的情況下。

+1

返回值有兩種可能的狀態,不是嗎?爲什麼不簡單地從你的函數返回布爾呢? – user3441734

+0

這很有道理。我會去做。 – Laurent