-2

我对 Swift 和一般编码仍然很陌生,我正在尝试为用户创建某种选项来更改彩色主题。

但是我对如何访问 swift 文件中的 switch 语句(或如何封装它)以及如何访问 set 变量一无所知?

到目前为止,我让用户在设置视图控制器中选择一个主题,并且主题的名称保存在 UserDefaults 中的“主题”键中。

在名为 theme.swift 的文件中,我创建了一个 switch 语句来检查名称。显然,每种情况都可以设置我在 switch 语句上方声明的几个变量。

但是我收到“顶层不允许声明”的错误?

我怎样才能解决这个问题?我可以做些什么来让 switch 语句在每次呈现视图控制器时运行以检查正确的颜色,或者在选择新主题并设置变量后让它运行?我理解错误消息,但我不知道如何解决这个问题。

例如,到目前为止,这就是我设置 theme.swift 文件的方式:

import UIKit

var theme = UserDefaults.standard.string(forKey: "themes")

var background: UIColor?
var labelColor: UIColor?
var buttonColor: UIColor?


switch theme {
    case "Red":
        background = UIColor(named: "darkRed")
        labelColor = UIColor(named: "labelRed")
        buttonColor = UIColor(named: "buttonRed")
    case "Blue":
        background = UIColor(named: "darkBlue")
        labelColor = UIColor(named: "labelBlue")
        buttonColor = UIColor(named: "buttonBlue")
    default:
        return
}

那么如何访问这些变量呢?

除了顶级错误之外,我是否可以像通常那样访问变量,因为它们是全局变量?

例如。startButton.setTitleColor(buttonColor, for: .normal)?

4

1 回答 1

1

您收到此错误是因为您的 switch 语句只是位于某个类或结构中(不清楚您在哪里实现了此代码)。要修复您的错误,您需要将该开关放在一个函数中。也许您可以创建一个名为 的函数setTheme,如下所示:

var theme = UserDefaults.standard.string(forKey: "themes")

var background: UIColor?
var labelColor: UIColor?
var buttonColor: UIColor?

func setTheme() {
  //First, check to make sure theme is not nil
  guard let theme = self.theme else { return }
  switch theme {
  case "Red":
    background = UIColor(named: "darkRed")
    labelColor = UIColor(named: "labelRed")
    buttonColor = UIColor(named: "buttonRed")
  case "Blue":
    background = UIColor(named: "darkBlue")
    labelColor = UIColor(named: "labelBlue")
    buttonColor = UIColor(named: "buttonBlue")
  default:
    return
  }
}

另一种选择是使您的UIColor?属性计算变量。例如:

var background: UIColor? {
  guard let theme = self.theme else { return nil }
  switch theme {
    case "Red": return UIColor(named: "darkRed")
    case "Blue": return UIColor(named: "darkBlue")
    default: return nil
  }
}
于 2018-01-22T20:12:32.670 回答