Преобразовать инструкции «if» в «switch» в Swift

#swift

#swift

Вопрос:

Не могли бы вы помочь мне преобразовать эти if инструкции в switch с падежами, пожалуйста? Я некоторое время борюсь и не могу понять, как заставить это работать.

Вот код:

 class Settings: NSObject {
    let name: SettingsName
    let imageName: String

    init(name: SettingsName, imageName: String){
        self.name = name
        self.imageName = imageName
    }
}

enum SettingsName: String {
    case settings = "Settings"
    case terms = "Terms amp; privacy policy"
    case feedback = "Send Feedback"
    case help = "Help"
    case switchAccount = "Switch Account"
    case cancel = "Cancel"
}

@objc func handleDismiss(setting: Settings) {
    UIView.animate(withDuration: 0.5, animations: {
        self.blackView.alpha = 0
        if let window = UIApplication.shared.keyWindow {
            self.collectionView.frame = CGRect(x: 0, y: window.frame.height, width: self.collectionView.frame.width, height: self.collectionView.frame.height)
        }
    }, completion: { (_) in
        if setting.name == .settings {
            self.homeController?.showControllerForAccountSettings(setting: setting)
        }

        if setting.name == .terms {
            self.homeController?.showControllerForTermsAndPrivacy(setting: setting)
        }

        else if setting.name != .cancel amp;amp; setting.name != .settings{
            self.homeController?.showDummyControllerForSetting(setting: setting)
        }
    })
}
  

Комментарии:

1. Не имеет отношения к вашему вопросу, но я бы объявил перечисление вложенным в ваш класс настроек class Settings { enum Name: String { case settings = "Settings", terms = "Terms amp; privacy policy", feedback = "Send Feedback", help = "Help", switchAccount = "Switch Account", cancel = "Cancel" } let name: Name let imageName: String init(name: Name, imageName: String) { self.name = name self.imageName = imageName } }

2. И не создавайте подклассы NSObject , если вам это действительно не нужно.

Ответ №1:

Похоже, вы хотите сделать это:

 switch settings.name {
    case .settings:
        self.homeController?.showControllerForAccountSettings(setting: setting)
    case .terms:
        self.homeController?.showControllerForTermsAndPrivacy(setting: setting)
    case .cancel:
        break
    default:
        self.homeController?.showDummyControllerForSetting(setting: setting)
}