首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当它依赖于给定的领域设置时,如何“进入”某个switch-statement模式?

当它依赖于给定的领域设置时,如何“进入”某个switch-statement模式?
EN

Stack Overflow用户
提问于 2019-01-07 20:07:31
回答 1查看 46关注 0票数 0

我在我的应用程序中提供了几种语言。我希望在这种情况下,‘语言设置-Btn’是在打开的VC。默认的语言将是英语,但用户可以更改为其他语言的tableView通过这个按钮访问。

我目前的尝试(这可能不是最聪明的方法)是创建一个名为Language的领域类,然后将按钮附加到LanguageSettingTableView中的所有单元格。当按下其中一个按钮(语言)时,用户将Language.diaryLanguage更改为所按下的按钮所表示的任何值。

然后我在我的welcomeScreenVC中设置了一个切换语句,目前我有四种不同的情况:英语,西班牙语,丹麦语,德语(只是作为开始)。

所以我想设置一个if语句(我猜?)inside viewWillAppear,其中我声明: if Language.diaryLanguage ==“viewWillAppear”--> Present case .english等,但我似乎找不到如何到达这些不同的案例。

下面是我在welcomeScreenVC中的相关代码:

代码语言:javascript
复制
import UIKit
import RealmSwift

enum LanguageMode {
case english
case spanish
case danish
case german
 }

class WelcomeScreen: UIViewController  {

var getStartedBtn = UIButton ()
var informationBtn = UIButton ()
var seeAllDiariesBtn = UIButton ()
var languageSettingsBtn = UIButton ()

var currentLanguage = Language()
var mode: LanguageMode = .english

private func modeUpdate() {
    switch mode {

    case .english:
        getStartedBtn.setTitle("Create new People Diary", for: .normal)
        informationBtn.setTitle("Read More", for: .normal)
        seeAllDiariesBtn.setTitle("See all People Diaries", for: .normal)
        languageSettingsBtn.setTitle("Language", for: .normal)

    case .danish:
        getStartedBtn.setTitle("Lav ny People Diary", for: .normal)
        informationBtn.setTitle("Læs Mere", for: .normal)
        seeAllDiariesBtn.setTitle("Se alle People Diaries", for: .normal)
        languageSettingsBtn.setTitle("Sprog", for: .normal)

    case .spanish:
        getStartedBtn.setTitle("Hace nuevo People Diary", for: .normal)
        informationBtn.setTitle("Lees Mas", for: .normal)
        seeAllDiariesBtn.setTitle("Mirra todos People Diaries", for: .normal)
        languageSettingsBtn.setTitle("Idiomas", for: .normal)

    case .german:
        getStartedBtn.setTitle("Bla bla Bla", for: .normal)
        informationBtn.setTitle("Bla bla bla", for: .normal)
        seeAllDiariesBtn.setTitle("Bla bla", for: .normal)
        languageSettingsBtn.setTitle("Bla bla", for: .normal)
    }
 }

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
    super.viewWillAppear(animated)

    if currentLanguage.diaryLanguage == "English" {
    // Then present case .english ...
    } else if currentLanguage.diaryLanguage == "Danish" {
        // Present case .danish ...
    } else if currentLanguage.diaryLanguage == "Spanish" {
        // Present case .spanish ...
    } else if currentLanguage.diaryLanguage == "German" {
        // Present case .german ...
    } else {
        // present .english (pr. default)
    }

    modeUpdate()
}

我希望有人能告诉我如何做到这一点。首先谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 04:32:03

虽然我同意iOSer的建议,即localisation将是实现您所描述的功能(see this guide for a good starting point)的更好的解决方案,但要回答您关于如何使用switch语句的特定问题,您只需将变量更新为与您想要执行的情况相关联的值。

代码语言:javascript
复制
enum Language {
    case english, french, german
}

var language: Language = .english

func generateGreeting() -> String {
    switch language {
        case .english:
            return "Hello!"

        case .french:
            return "Bonjour!"

        case .german:
            return "Guten Tag!"
    }
}

generateGreeting() // 'Hello!'

language = .french
generateGreeting() // 'Bonjour!'

language = .german
generateGreeting() // 'Guten Tag!'

在您的enum表示特定类型的值的情况下,例如在关联了String的示例中,您可以将其用作每个案例的值。

代码语言:javascript
复制
enum Language: String {
    case english = "English"
    case french = "French"
    case german = "German"
}

Language(rawValue: "English") // .english
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54074143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档