[英]Switch case within switch case in Swift
我有一個 Swift 語法問題。 我在 function 中有一個開關盒,我需要制作一個如下所示的嵌套開關盒。
func changeIcon(status: String){
switch status {
case "ready", "recording", "finished", "error":
if indicator.isAnimating {
indicator.stopAnimating()
indicator.hidesWhenStopped = true
}
indicator.isHidden = true
symbolImageView.isHidden = false
switch status{
case "ready":
symbolImageView.image = Images.streamIsReady
case "recording":
symbolImageView.image = Images.streamIsOngoing
case "finished":
symbolImageView.image = Images.close
case "error":
symbolImageView.image = Image.error
default:
print("default")
}
case "init":
symbolImageView.isHidden = true
indicator.isHidden = false
indicator.startAnimating()
default:
print("default")
}
}
我想使用 switch case(或者如果可能的話,如果語句也可以)來檢查我是否顯示 UIimage 或 UIActivityIndicator,然后使用另一個 switch case 來確定應該顯示哪個 UIImage。 我想知道使用嵌套開關盒是否是多余的,並且有另一種方法可以實現相同的目的。
例如,您可以添加 function
func changeIcon(status: String) {
switch status{
case "ready":
updateImage(.streamIsReady)
case "recording":
updateImage(.streamIsOngoing)
case "finished":
updateImage(.close)
case "error":
updateImage(.error)
case "init":
symbolImageView.isHidden = true
indicator.isHidden = false
indicator.startAnimating()
default:
print("default")
}
}
func updateImage(_ image : Images){
if indicator.isAnimating {
indicator.stopAnimating()
indicator.hidesWhenStopped = true
}
indicator.isHidden = true
symbolImageView.isHidden = false
symbolImageView.image = image
}
我同意 Sulthan:使用枚舉而不是字符串
首先,你應該有一個enum
:
enum Status: String {
// "init" renamed to "loading"
case loading, ready, recording, finished, error
var icon: UIImage? {
switch self {
case .loading:
return nil
case .ready:
return Images.streamIsReady
case .recording:
return Images.streamIsOngoing
case .finished:
return Images.close
case .error:
return Image.error
}
}
}
然后你的代碼可以變成:
func changeIcon(status: Status) {
if status == .loading {
indicator.startAnimating()
} else {
indicator.stopAnimating()
}
let icon = status.icon
symbolImageView.isHidden = icon == nil
symbolImageView.image = icon
}
語句indicator.hidesWhenStopped = true
應該是您的視圖設置的一部分,而不是在此 function 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.