#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)
}